我正在尝试制作一个以名字 姓氏读取的C程序,有时它可能包含一个中间名。换句话说,我可能会读取两个或三个字符串,具体取决于输入。
期望输出:
姓氏,后跟逗号,跟随第一个名字的首字母,或者在中间名称的情况下,包括名字首字母和中间名字首字母。
示例:
输入:
John Smith
John David Smith
John D. Smith
输出:
Smith, J.
Smith, J. D.
Smith, J. D.
我的尝试:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define size 20
#define max size*4
int main()
{
char name[max];
char first[size];
char mid[size];
char last[size];
int read;
/* Read the full name string*/
fgets(name, max, stdin);
/* 'read' returns number of variables read */
read = sscanf(name, "%s %s %s", first, mid, last);
/* If we only read first name and last name */
if (read == 2) printf("%s, %s", mid, first[0]);
/* 'read' should be 3 if we read all three variables */
if (read == 3) printf("%s, %s %s", last, first[0], mid[0]);
return 0;
}
当我运行它时,它给了我分段错误。我做错了什么?
答案 0 :(得分:3)
您的第二个和最后一个打印输出值是字符,而不是字符串,因此请使用%c
代替%s
;
if (read == 2) printf("%s, %c", mid, first[0]);
if (read == 3) printf("%s, %c %c", last, first[0], mid[0]);