繁体   English   中英

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

[英]“Enter a character to quit” program in 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:”总是出现两次,我该如何解决?

输入q时,按q,然后按Enter(就C而言,一个新的换行字符为\\ n)。

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

尝试使用如下fgets: fgets (option , 4 , stdin)

您必须确保有足够大的字符数组来容纳它,因此您应该定义char option [3]; 保留“ q”,换行符“ \\ n”和终止符“ \\ 0”;

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

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

之所以将它打印两次,是因为在您按Enter键时,在标准输入后面附加了换行符\\n

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

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

如果您按下两个键,您将读取两个字符。 如果要阅读字符 ,请致电getchar 如果要读取 ,请调用一些读取行的函数。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM