scanf和/或fgets程序cuttoff的问题

时间:2015-05-27 03:07:23

标签: c scanf stdin fgets

我正在尝试编写一个使用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!

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

1 个答案:

答案 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);