所以这是代码,它非常简单,但为什么在第一个循环后不再提示fgets
?和年龄是。 (奇怪的是,它适用于scanf("%s",&name_temp)
,但我需要抓住其他字符,就像éíóúÇ,空格一样,所以fgets
会更好。
int menu_option = 0;
char name_temp[80] = "";
int age_temp = 0;
while(menu_option != 9){
//strcpy(name_temp,"");
printf("Type your name\n");
fgets(name_temp, 80, stdin);
printf("\nType your age\n");
scanf("%d", &age_temp);
}
(已删除的答案移出)
伙计们感谢您的回答,但我不认为你们理解我的问题,测试我发送的代码,你会看到它不是出现在终端中的东西供你输入,它只是被忽略了在第一个while循环之后。
我想要的是,在第一个循环(while)之后,它又返回并再次询问该人的姓名,并且使用该程序的人必须再次输入。但不是这样,在第一次循环之后,它只是不要求你输入任何内容,fgets完全被忽略。
请尝试代码并说出我能做些什么。
我试过了freopen的东西而且没用。
答案 0 :(得分:3)
当我运行它时,确实每次都通过循环打印出“键入你的名字”,但是没有等待输入,因为它获得了对输入流上的scanf调用的'\ n' 。这是一个常见问题;一种解决方案是插入getchar();在循环的底部,吃那个换行符。
答案 1 :(得分:2)
fgets
读取一行,即在stdin
字符到达之前读取\n
。
scanf
将\n
字符留给stdin
。
然后,fgets
读取一个空行。
答案 2 :(得分:-1)
您应该以二进制模式打开stdin
。使用freopen(NULL, "rb", stdin)
执行此操作。
有关详细信息,请参阅C read binary stdin。