2011-03-20 59 views
0

所以这是代码,它很简单,但为什么fgets在第一次循环后再次提示?和年龄是。 (和古怪它的工作原理与scanf("%s",&name_temp)但我需要抓住其他人物太像áéíóúÇ,空间,所以它会与fgets更好)Fgets在C编程中运行一次后被忽略了吗?

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); 

} 

(从已删除的答案移动)

家伙感谢您的回答,但我不认为你们明白我的问题,测试此代码是我送的,你会看到,而不是在终端出现的事情你输入,它只是忽略在第一次厕所之后页。

我想那是什么,第一循环结束后(同时),它回来了,再次询问的人,使用该程序将不得不再次键入该人的姓名。但是在第一次循环之后,它并不要求你输入任何内容,fgets完全被忽略了。

请尝试下面的代码并说出我能做些什么。

我试过freopen的东西,并没有工作。

+0

你不需要在问题后面加上[非常简单的问题]。 – 2011-03-20 11:14:52

+0

@user:请注意,markdown在引号(使用'>')和代码块(使用四个空格)之间进行格式化区分,并注意程序员认为case是标识符拼写的一部分,所以“Fgets”不是与“fgets”相同。 – dmckee 2011-03-20 14:58:09

+0

你不应该接受一个不起作用的回答 – 2014-10-16 04:45:27

回答

-1

你应该以二进制模式打开stdin。使用freopen(NULL, "rb", stdin)来做到这一点。

详情请参阅C read binary stdin

2

fgets读一行,也就是读stdin直到达到\n字符。

scanf\n字符变成stdin

然后,fgets读一个空行。

+0

我不认为这是OP询问的问题。 – 2011-03-20 11:29:11

+0

@MihranHovsepyan在我看来,这正是他的问题所在 – 2014-10-16 04:45:50

3

当我运行它,它确实打印出“输入你的名字”,通过每一次循环中,但没等输入,因为它是获得“\ n”其中SCANF留在输入电话流。这是一个常见问题;一个解决方案是插入getchar();在循环的底部,吃那个换行符。