gpt4 book ai didi

c - scanf 和/或 fgets 程序中断的问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:21 24 4
gpt4 key购买 nike

我正在尝试编写一个代码,使用 scanf 读取一个整数,然后通过输入"is"或“否”询问用户是否愿意输入另一个整数。编译时我没有收到任何错误,但是当我运行程序时,它要求输入数字,按应有的方式显示,要求继续,然后在不进行任何输入的情况下立即关闭。

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!

我不确定为什么它会立即退出任何帮助都会很棒。

最佳答案

您的问题源于这样一个事实,即在使用 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);

关于c - scanf 和/或 fgets 程序中断的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30472454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com