我对 C 中的字符串 (char*) 用法有一些建议。
首先,正如 sumithdev 所说,在输入任何信息之前,使用 fflush(stdin) 清理输入流缓冲区。
其次,尽量使用统一的样式来存储所有的字符串数据。例如,您的 middleInitial 也可以定义为 char 数组,但长度可能为 2(middleInitial[0] 将是一个字符,middleInitial[1] 将是一个'\0')。
最后一条建议——尝试使用强大的函数来防止内存违规和数据丢失。
代码:
scanf(" %s %s", firstName, lastName);
我看到了潜在的问题:
a) 通常用户的名字或姓氏可以多于一个单词,但 scanf 中的一个 %s 读取字符直到空格;
b) 名字或姓氏可以大于 29 个字母,数组的 30 个元素不足以存储输入,这会导致运行时问题;
c) 当您想更改名称不同部分的输入顺序或添加一些检查时,您的代码中会有很多硬修改。
考虑以下版本:
char middleInitial[2];
char firstName[30], lastName[30];
// asking for middle part
printf("What is your middle initial? ");
fflush(stdin); // delet all previous inputs
scanf("%1s", middleInitial); // wait new inputs and take only 1 character
// asking for first part
printf("What is your first name? ");
fflush(stdin);
scanf("%29s", firstName); // wait new inputs and take not more than 29 characters
// asking for last part
printf("What is your last name? ");
fflush(stdin);
scanf("%29s", lastName); // wait new inputs and take up to 29 characters
// output result
printf("Your name is %s %s %s\n", firstName, middleInitial, lastName);
并且还尝试使用 fgets 而不是 scanf。例如:
fflush(stdin);
fgets(firstName, 30, stdin); // this allows input of strings with spaces
// but adds 'new line' (\n) in the end of string