从用户那里获取输入时遇到问题。我使用scanf
函数从用户获取输入,我认为这是问题的原因。
我希望这两个提示是分开的。
下面的代码是一个简单的问题示例:
#include <stdio.h>
int main(void)
{
char name[20];
int age = 0;
int index;
printf("1- Insert a new student.\n");
printf("2- Delete a student.\n");
printf("3- Show all students.\n");
printf("4- Exit.\n\nChoose: ");
scanf("%d", &index);
printf("Enter your name: ");
scanf("%20[^\n]s", name);
//fgets(name, 20, stdin); // <--- Does the same thing.
printf("Enter your age: ");
scanf("%d", &age);
printf("Name: %s, Age: %d\n", name, age);
return 0;
}
结果为文本:
1- Insert a new student.
2- Delete a student.
3- Show all students.
4- Exit.
Choose: 2
Enter your name: Enter your age:
图像:
为什么两个提示显示在同一行?
最佳答案
我建议你改一下:
scanf("%20[^\n]s", name);
对此:
scanf(" %19[^\n]", name);
出于这些原因:
指定为
scanf
的缓冲区大小不包括最终的NUL
终止符(与fgets
不同)。前一个
scanf
在输入缓冲区中留下了一个新行,格式说明符%[]
和%c
不会自动过滤它(与%d
和其他说明符不同)。添加空格告诉scanf
过滤它。最后的
s
不是格式%[]
的一部分,但是使用过%s
的编码人员经常犯错误。还需要注意的是,带有
scanf
的%[]
并不等同于fgets()
,后者读取任何最后的换行符并将其放在提供的缓冲区中。