C do while未按预期工作

C do while未按预期工作,c,gcc,do-while,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) : ");

我是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编译器编译并运行它。

Put:
getchar()

以前

choice=getchar()

使用
scanf()
之后留在
stdin
中的
\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');
Put:
getchar()

以前

choice=getchar()

使用
scanf()
之后留在
stdin
中的
\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');

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

使用以下命令更改
getchar()
行:

scanf(" %c", &choice);

…它应该可以工作。

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

使用以下命令更改
getchar()
行:

scanf(" %c", &choice);
…它应该会起作用

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

if(DidYouDownVote())cout
if(DidYouDownVote())cout您的代码不工作:
scanf(“%c”)
是否收到
\n
。在
%c
之前,您需要一个额外的空间来清除所有空格、制表符和换行符谢谢您指出我:)修复了答案。您的代码无效:
scanf(“%c”)
确实收到了
\n
。在
%c
之前,您需要一个额外的空间来清除所有空格、制表符和换行符谢谢您指出我:)修复了答案。谢谢。。。这对我有用。谢谢。。。这对我有用。