为什么这个简单的代码不等待学生姓名(由用户输入)?

Why isn't this simple code waiting for student name (entered by user)?

这段C代码不是在等待学生姓名。它直接打印学生总数。但是当我注释掉第一个 printf-scanf 语句(或输入学生人数:)时,代码正在等待用户输入学生姓名。

#include <stdio.h>

int main()
{

 char name[10];
 int count;

 printf("ENTER NUMBER OF STUDENTS:\n");
 scanf("%d", &count);

 printf("ENTER STUDENT NAME:\n");
 scanf("%[^\n]%*c", &name);

 printf("Total_Students: %d\n", count);
 printf("NAME: %s\n", name);
 return (0);
 }

跳过第二个 scanf,因为从第一个 scanf 开始解释换行符。

例如,如果您在学生人数中输入 2,则输入的是 2\n。第一个 scanf 读取数字 2 并将 \n 留在由第二个 scanf 解释的缓冲区中。

您只需在第二个 scanf 中添加一个 space 即可解决此问题

scanf(" %[^\n]%*c", &name);

将第二个 scanf() 参数更改为 %s 并直接使最后一个条目成为 NULL .