簡體   English   中英

getchar正在打印額外的輸出

[英]getchar is printing extra output

root@ubuntu:~/DH$ cat E1-6.c 
#include<stdio.h>
main()
{
    int c;
    while(c = (getchar() != EOF)) {
        printf("HI: %d",c);
        //putchar(c);
    }
}
root@ubuntu:~/DH$ cc E1-6.c
root@ubuntu:~/DH$ ./a.out 
1
HI: 1HI: 1

我使用鍵盤輸入為1,但在輸出中顯示兩次。 有人可以解釋一下這里發生了什么嗎?

發生錯誤是因為,正如注釋所指出的那樣,“1”是一個鍵,而“1”(或者Ctrl - D表示EOF )后的“輸入”是另一個鍵。 至於為什么兩個都打印出“1”,這是因為你將c設置為getchar() != EOF的布爾值(true / false)。 我認為你想要的是

while ((c = getchar()) != EOF)

如果你的循環在頂部。 這會將按下的鍵保存到c ,然后檢查EOF。

您的while語句無法正常工作。 嘗試使用輸入“2”運行程序,我想你會得到一個有趣的結果。

您的輸入是字符1 ,后跟換行符\\n ,然后是EOF。 在第一次調用getchar返回11EOF ,因此c = 1 第二個調用返回\\n\\n不是EOF ,所以再次c = ('\\n' != EOF) ,這意味着c = 1

嘗試改為:

while((c = getchar()) != EOF) {

我認為

while(c = (getchar() != EOF)) {

應該

while((c = getchar()) != EOF) {

因為c不應該分配給比較而是分配給getchar的返回值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM