do-while没有按预期工作

时间:2014-08-27 17:08:54

标签: c gcc do-while

我是c的新手,并在链接列表中用c编写程序。它是一个简单的程序。
我用它来输入要列出的号码直到用户想要。

代码如下:

do {
    system("clear");
    printf ("\nEnter a no to add to list : ");
    scanf ("%d",&num);
    append (&p,num);
    display (p);
    printf ("\n\nWhant to add more...(Y/N) : ");
    choice = getchar();
} while (choice == 'y' || choice == 'Y');

当用户输入选项时,程序退出...

我在linux [ubuntu]上使用gcc编译器来编译和运行它。

3 个答案:

答案 0 :(得分:4)

您的scanf读取一个号码并停止从stdin读取,但是当您输入一个号码时,您会发送该号码加上\n个字符。这就是getchar()所读的内容。它不是yY,因此循环结束。

使用以下内容更改getchar()行:

scanf(" %c", &choice);

......它应该有用。

答案 1 :(得分:1)

放:getchar();

之前

choice = getchar();

使用\n之后stdin内留下的scanf()字符。

然后代码结果为:

do {
    system("clear");
    printf ("\nEnter a no to add to list : ");
    scanf ("%d",&num);
    append (&p,num);
    display (p);
    printf ("\n\nWhant to add more...(Y/N) : ");
    getchar(); //needed to consume the \n character
    choice = getchar();
    }while (choice == 'y' || choice == 'Y');

答案 2 :(得分:1)

  

getchar()返回标准输入(stdin

中的下一个字符

scanf()语句后按Enter键时,输入缓冲区中累积了\n个字符。因此,choice的值自动设置为\n,循环条件变为false。

您可以使用scanf()代替getchar()stdin读取格式化数据,最终保留choice的值。

do {
    system("clear");
    printf ("\nEnter a no to add to list : ");
    scanf ("%d",&num);
    append (&p,num);
    display (p);
    printf ("\n\nWhant to add more...(Y/N) : ");
    scanf(" %c", &choice);
} while (choice == 'y' || choice == 'Y');