[英]“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.