我正在通過K & R中的一些練習來工作。練習1-6要求驗證表達式getchar() != EOF
是0還是1.我理解它的原因,但代碼我寫信證明它沒有按預期工作。我寫了下面的兩個片段:putchar和printf沒有像預期的那樣運行
版本1:
int main(void)
{
int c;
while (c = getchar() != EOF)
{
putchar(c);
}
printf("%d at EOF\n", c);
return 0;
}
版本2:
int main(void)
{
int c;
while (c = getchar() != EOF)
{
printf("%d\n", c);
}
printf("%d at EOF\n", c);
return 0;
}
我的問題:
當我在一個角色類型和命中進入與版本一,爲什麼我在屏幕上看不到0或1?相反,我的光標移動到下一行的第一個位置,否則爲空。我雖然
putchar
會發送c
到stdout
。儘管在第二個版本中使用
printf
確實會產生0或1,但它會爲每個非EOF字符(我在輸入的每個字符在兩個連續行上看到數字1)重複1。爲什麼?
非常感謝您的想法。如果有您認爲有用的參考資料,請發送鏈接。
澄清:
我知道我指定的C 0或1。這就是我想要做的值,它是行使想要什麼。這也是爲什麼我沒有圍繞c = getchar()
的括號。我的問題更多的是理解爲什麼產量不符合我的預期。對不起,有任何困惑。
你應該啓用警告'-Wall -Wtratra' – Stargateur
我實際編譯了gcc代碼。我在一個由課程(CS50)提供的IDE中工作,當我嘗試使用make和clang編譯時,我不能。這些警告不會阻止我的代碼編譯? – BruceM
「每個非EOF字符爲1」 - >所有字符均爲非EOF。 End-of_file是一個條件,而不是一個字符。 – chux