簡體   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