为什么这个简单的代码不等待学生姓名(由用户输入)?
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
.
这段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
.