"Enter a character to quit" C 语言程序



我尝试用C语言编写一个程序,使用循环,直到从键盘输入特定字符。下面是我的代码:

#include <stdio.h>
main ()
{
    char option;
    do
        {
            printf("Enter q to quit: ");
            option = getchar ();
        }
    while (option != 'q');
}

我也尝试过scanf(),但结果总是一样的。下面是我尝试测试程序后的输出:

Enter q to quit: 3
Enter q to quit: Enter q to quit: 2
Enter q to quit: Enter q to quit: 1
Enter q to quit: Enter q to quit: q

有谁能告诉我为什么"Enter q to quit: "总是出现两次,我该怎么解决它?

"Enter q to quit: "出现了两次,因为你的输入缓冲区在第二次运行时仍然有新的行字符在里面。

修复:

#include <stdio.h>
int main ()
{
    char option;
    do
    {
        printf("Enter q to quit: ");
        option = getchar ();
        while(getchar() != 'n'); //Enter this line here.
    }
    while (option != 'q');
}

当您输入q时,您按q后跟enter(对于C而言,这是一个新的行字符,即n)。

所以当你的循环返回到开始时,'n'仍然在你的输入缓冲区中,getch()会自动读取它,并在再次返回到循环开始之前检查它是否等于q(因此你的文本看起来像打印了两次)。

试试这样使用fgets:fgets (option , 4 , stdin)

你必须确保你有一个足够大的字符数组来容纳这个,所以你应该定义char option [3];保存'q'、'n'和'';

fgets是一个很好的解决方案,因为它只存储第二个参数值的字符,而丢弃其余的字符。这意味着1)您不会溢出变量/数组,2)您不会在输入缓冲区中留下垃圾:)

它会被打印两次,因为当你按回车键时,一个换行字符n被附加到stdin中。

可以通过添加一个额外的getchar来丢弃换行字符:

do
{
    printf("Enter q to quit: ");
    option = getchar();
    getchar(); // discard line feed
}while (option != 'q');

如果您按两个键,您将读取两个字符。如果要读取字符,请调用getchar。如果你想读取,调用一些读取行

的函数。

getchar()函数首先从缓冲区中读取。如果缓冲区是空的,那么它将从标准输入(即屏幕)读取。

最新更新