![](/img/trans.png)
[英]C: Simple copy input (getchar) to output (printf) return extra lines
[英]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
返回1
, 1
不EOF
,因此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.