我正在尝试编写一个使用scanf读取整数的代码,然后通过输入" yes"来询问用户是否想要输入另一个。或"不"。我编译时没有错误,但是当我运行程序时它会询问数字,显示它应该是,请求继续然后立即关闭而不接受任何输入。
int main()
{
int *data=malloc(1*sizeof(int));
if(data==NULL)
{
printf("out of memory");
exit(1);
}
char *yc="yes";
char uinput[20];
int numinput;
printf("enter a number \n");
scanf("%d",&numinput);
data[0]=numinput;
printf("you entered %d \n",numinput);
printf("would you like to enter another # ?");
fgets(uinput,sizeof(uinput),stdin);
int count=0;
int n,i;
int comp=strncmp(uinput,yc,1);
while(comp==0)
{
n=sizeof(data)/sizeof(data[0]);
count=count+1;
data=(int*)realloc(data,n+1);
printf("enter another number:\n");
scanf("%d",&numinput);
data[n+1]=numinput;
printf("the numbers are:\n");
for(i=0;i<=count;i++)
{
printf("%d\n",data[i]);
}
printf("would you like to enter another # ?");
fgets(uinput,sizeof(uinput),stdin);
}
printf("Goodbye!\n");
return(0);
}
这是我运行程序时发生的事情
./vector_play.out
enter a number
6
you entered 6
would you like to enter another # ?Goodbye!
我不确定为什么立即退出任何帮助都会很棒。
答案 0 :(得分:1)
您的问题源于使用
中的代码读取numinput
之后的事实
scanf("%d",&numinput);
换行符仍留在输入流中。对fgets
的调用将换行读取为完整行并返回,而不等待任何进一步的输入。
您需要添加一行来忽略输入流的其余部分。您也可以将fgets
用于此目的。
scanf("%d",&numinput);
fgets(uinput,sizeof(uinput),stdin); // Read and ignore
printf("you entered %d \n",numinput);
printf("would you like to enter another # ?");
fgets(uinput,sizeof(uinput),stdin);