c – 以标准格式打印名称
发布时间:2020-12-16 10:03:33 所属栏目:百科 来源:网络整理
导读:我正在尝试开发一个基本程序,它以您的名字命名并以标准格式提供输出.问题是我希望用户可以选择不添加中间名. 例如:Carl Mia Austin给了我C. M. Austin但是我想要即使输入是Carl Austin它也应该给C. Austin而不询问用户他们是否有中间名. 那么,有没有一种方
我正在尝试开发一个基本程序,它以您的名字命名并以标准格式提供输出.问题是我希望用户可以选择不添加中间名.
例如:Carl Mia Austin给了我C. M. Austin但是我想要即使输入是Carl Austin它也应该给C. Austin而不询问用户他们是否有中间名. #include <stdio.h> int main(void) { char first[32],middle[20],last[20]; printf("Enter full name: "); scanf("%s %s %s",first,middle,last); printf("Standard name: "); printf("%c. %c. %sn",first[0],middle[0],last); return 0; } 解决方法
正如目前所写,scanf(“%s%s%s”,第一,中,最后);期望输入3个部分,并等待用户输入.
您想要使用fgets()读取一行输入,并使用sscanf扫描名称部分,并计算转换的部分数量: #include <stdio.h> int main(void) { char first[32],middle[32],last[32]; char line[32]; printf("Enter full name: "); fflush(stdout); // make sure prompt is output if (fgets(line,sizeof line,stdin)) { // split the line into parts. // all buffers have the same length,no need to protect the `%s` formats *first = *middle = *last = ' '; switch (sscanf(line,"%s %s %[^n]",last)) { case EOF: // empty line,unlikely but possible if stdin contains ' ' case 0: // no name was input printf("No namen"); break; case 1: // name has a single part,like Superman printf("Standard name: %sn",first); strcpy(last,first); *first = ' '; break; case 2: // name has 2 parts printf("Standard name: %c. %sn",middle); strcpy(last,middle); *middle = ' '; break; case 3: // name has 3 or more parts printf("Standard name: %c. %c. %sn",last); break; } } return 0; } 请注意,在现实生活中,名字可能会更加通用:想想多字节字符的外国名字,或者甚至简单的威廉亨利盖茨三世,也被称为比尔盖茨.上面的代码处理后者,但不是这一个:éléonoredeProvence,亨利三世的年轻妻子,英格兰国王,1223 – 1291. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |