[英]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.