2014-08-27 35 views
1

我是新来的c和编写链接列表中的c程序。它是一个简单的程序。
我正在使用它来输入数字列表,直到用户想要的。do-while不按预期工作

的代码为:

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上[求助] GCC编译器来编译并运行它。

+1

'if(DidYouDownVote())cout <<“提供一个原因。” << endl;' – 2014-08-27 17:21:56

回答

4

scanf读取数并停止stdin阅读,但是当你输入一个号码,你发送的数量加上\n字符。这是getchar()读取的内容。它不是yY,所以循环结束。

更改与这一个你getchar()行:

scanf(" %c", &choice); 

...,它应该工作。

+0

谢谢......它为我工作。 – 2014-12-13 15:55:06

1

推测:getchar();

choice = getchar();

要消耗的是留在stdinscanf()\n字符。然后

代码结果:

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'); 
1

getchar()从标准输入(stdin

当您按下scanf()语句后输入,一个\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'); 
+0

你的代码不起作用:'scanf(“%c”)'确实收到了'\ n'。在'%c'之前需要额外的空间来摆脱所有空格,制表符和换行符 – 2014-08-27 19:45:53

+0

感谢您指点我:)修正了答案。 – 2014-08-27 19:55:54