在C中输入“退出字符”程序

时间:2015-10-12 09:13:53

标签: 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

有人可以向我解释为什么“输入q退出:”总是出现两次,我该如何解决?

5 个答案:

答案 0 :(得分:3)

当你输入q时,你按q然后按回车(就C而言是一个新的行字符是\ n)。

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

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

你必须确保你有一个足够大的字符数组来保存它,所以你应该定义 char option [3];举行&#39; q&#39;,换行符&#39; \ n&#39;和终止字符&#39; \ 0&#39;;

fgets是一个非常好的解决方案,因为它只会存储第二个参数值,然后扔掉其余的。这意味着1)你没有溢出你的变量/数组和2)你没有在输入缓冲区中留下垃圾:)

答案 1 :(得分:3)

&#34;输入q退出:&#34;出现两次,因为输入缓冲区在第二次运行时仍然有新行字符。

修正:

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

答案 2 :(得分:2)

您打印两次,因为当您按Enter键时,换行符\n会附加到标准输入。

您可以通过添加额外的getchar来丢弃该换行符:

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

答案 3 :(得分:1)

如果您点击两个键,则会读取两个字符。如果您想阅读字符,请致电getchar。如果你想阅读,请调用一些读取行的函数。

答案 4 :(得分:0)

getchar()函数首先从缓冲区读取。如果缓冲区为空,则它将从标准输入(即屏幕)读取。