我正在尝试从用户那里获得输入,而fgets正在跳过第一个输入。我知道原因是fgets正在阅读' \ n'从前面的陈述或至少我认为这是原因,但我似乎无法解决它
请注意,这是较大项目的一部分
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1000
int main(void) {
char content[MAX];
char content2[MAX];
char content3[MAX];
char content4[MAX];
char content5[MAX];
char input[4];
char input2[4];
printf("Do you want to continue yes/no?\n");
fgets(input, 4, stdin);
if (strncmp (input, "no", 2) == 0) {
break;
}
else if (strncmp (input, "yes", 3) == 0) {
fflush(stdin);
printf("Country:\n");
fgets(content, MAX, stdin);
printf("Province/state: \n");
fgets(content2 ,MAX, stdin);
printf("Postal/zip code:\n");
fgets(content3 ,MAX, stdin);
printf("Company:\n");
fgets(content4 ,MAX, stdin);
printf("Email:\n");
fgets(content5 ,MAX, stdin);
}
答案 0 :(得分:3)
"yes"
加上终止空字符占用4个字节,因此'\n'
保留在缓冲区中。将更多缓冲区分配给input
并将其新长度传递给fgets()
,以便在不在流中留下换行符的情况下读取yes
。
另请注意fflush(stdin);
调用未定义的行为,因此您不应该使用它。
答案 1 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1000
int main(void) {
char content[MAX];
char content2[MAX];
char content3[MAX];
char content4[MAX];
char content5[MAX];
char input[4];
char input2[4];
printf("Do you want to continue yes/no?\n");
fgets(input, 4, stdin);
if (strncmp (input, "no", 2) == 0) {
exit(0);
}
else if (strncmp (input, "yes", 3) == 0) {
fflush(stdin);//this is not portable
while(getchar()!='\n');//this thing works
printf("Country:\n");
fgets(content, MAX, stdin);
printf("Province/state: \n");
fgets(content2 ,MAX, stdin);
printf("Postal/zip code:\n");
fgets(content3 ,MAX, stdin);
printf("Company:\n");
fgets(content4 ,MAX, stdin);
printf("Email:\n");
fgets(content5 ,MAX, stdin);
}
}
fflush()大部分时间都不起作用。请改用以下代码
while(getchar()!='\n');
答案 2 :(得分:-2)
您是否尝试在fflush中添加 stdin ?你应该有这样的东西:
fflush(标准输入);