繁体   English   中英

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

[英]Fgets Ignored after its run one time in C Programming?

所以这是代码,非常简单,但是为什么在第一次循环后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循环。

我想要的是,在第一个循环(同时)之后,它又回来了,并再次询问了该人的姓名,并且使用该程序的人将不得不再次键入。 但是相反,在第一次循环之后,它只是不要求您键入任何内容,而fget被完全忽略了。

请尝试代码并说出我该怎么做。

我尝试过freopen,但没有成功。

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

fgets读取一行,即读取stdin直到到达\\n字符。

scanf\\n字符保留为stdin

然后, fgets读取一个空行。

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

有关更多详细信息,请参见C读取二进制stdin

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM