我正在嘗試使用getchar()讀取整數。這是我正在使用的代碼:使用getchar()讀取整數
while (thisChar = getchar() != '\n') {
n = n * 10 + thisChar - '0';
}
int n
被初始化爲零,並且thisChar
被聲明爲int
對於單位輸入,n被返回爲-47,這意味着爲start of heading
字符值正在被閱讀。我在while
表達式中分配thisChar
的方式有什麼不正確嗎?
我正在嘗試使用getchar()讀取整數。這是我正在使用的代碼:使用getchar()讀取整數
while (thisChar = getchar() != '\n') {
n = n * 10 + thisChar - '0';
}
int n
被初始化爲零,並且thisChar
被聲明爲int
對於單位輸入,n被返回爲-47,這意味着爲start of heading
字符值正在被閱讀。我在while
表達式中分配thisChar
的方式有什麼不正確嗎?
它遺漏括號:
int thisChar;
while ((thisChar = getchar()) != '\n') {
n = n * 10 + thisChar - '0';
}
如果沒有這些額外的括號,你總是分配給thisChar
比較getchar() != '\n'
的值,即始終1
或0
...
請注意,您也應該處理EOF
:
int thisChar = getchar();
while (thisChar != EOF && thisChar != '\n') {
n = n * 10 + thisChar - '0';
thisChar = getchar();
}
!=
have hi比=
運營商的優先級高。因此,表達式
while(thisChar = getchar() != '\n') {...}
將被解析爲
while(thisChar = (getchar() != '\n')) {...}
和比較getchar() != '\n')
的結果將被分配到thisChar
。
你需要把子表達式thisChar = getchar()
支架
while((thisChar = getchar()) != '\n') {...}
正確,但只有一個賦值運算符,因此它的關聯性無關緊要。問題是'!='具有比'='更高的優先級。 –
@KeithThompson;對不起。我現在糾正了它。 – haccks
給予好評裏面。 'thisChar - '0''可以是'1 - 48',這解釋了OP的'-47'爲單個數字。 –
@WeatherVane如果thischar的類型爲'int',那麼需要使用' - '0''是什麼? – roottraveller
@rkm_Hodor,因爲它正在讀取數字字符'0'..'9'',它們沒有* value *。所以你減去''0'來得到整數範圍'0..9'。在ASCII(這是常見的但並不總是使用)中,數字字符「0」,「9」具有值「48..57」。 –