0

这就是代码,它很简单,但是为什么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 的东西,但没有奏效。

4

3 回答 3

3

当我运行它时,它确实每次通过循环都打印出“键入你的名字”,但没有等待输入,因为它正在获取对 scanf 的调用留在输入流上的 '\n'。这是一个常见的问题;一种解决方案是插入 getchar(); 在循环的底部,吃掉那个换行符。

于 2011-03-20T15:42:10.023 回答
2

fgets读取一行,即读取stdin\n字符为止。

scanf\n将角色留在stdin.

然后,fgets读取一个空行。

于 2011-03-20T11:17:08.610 回答
-1

您应该stdin以二进制模式打开。用于freopen(NULL, "rb", stdin)执行此操作。

有关详细信息,请参阅C 读取二进制标准输入。

于 2011-03-20T11:18:27.637 回答