在C编程中运行一次后忽略Fgets?

时间:2011-03-20 11:13:13

标签: c fgets

所以这是代码,它非常简单,但为什么在第一个循环后不再提示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的东西而且没用。

3 个答案:

答案 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