在下面的代碼中比較的值是多少?存儲在非EOF變量中的值是什麼?
while ((c = getchar()) != EOF)
if (c == '\n')
我知道'\n'
是因爲單引號中的常量變量。我知道它代表了ASCII表格上字符的數值,對嗎?那等於110.但是什麼
((c = getchar()) != EOF)
return?
由於
在下面的代碼中比較的值是多少?存儲在非EOF變量中的值是什麼?
while ((c = getchar()) != EOF)
if (c == '\n')
我知道'\n'
是因爲單引號中的常量變量。我知道它代表了ASCII表格上字符的數值,對嗎?那等於110.但是什麼
((c = getchar()) != EOF)
return?
由於
關鍵的一點是,c
必須是int
:
int c;
while ((c = getchar()) != EOF) { char read_value = c; /* ... */ }
假設一個int
可以比char
持有更多的價值,或者至少多個值,該系統的窄多字節編碼使用*而getchar
返回一個特殊的常數EOF
,當它沒有讀取更多的數據時。否則,保證您可以將c
轉換爲char
並獲取已讀取的字符的值。
這是一個常見的錯誤申報c
本身作爲一個char
,在這種情況下,循環可能永遠不會終止,因爲你可能無法捕捉到的特殊價值EOF
,否則將有一個完全有效的字符這將與(char)EOF
無法區分。
*)例如,這將是完全正常的,如果兩者char
和int
是32個位寬一個給定平臺上,只要,比方說,窄流只能在範圍[用值返回單元-128,128),您可以使用-200
作爲EOF
。
C中的分配操作返回右值這是在等號的右邊的值。所以在這個例子中,c = getchar()返回任何字符或EOF。
不完全。賦值操作的值是分配的值。這可能與等號右側的值不同,因爲右側的值將轉換爲左側的左值類型,並且此轉換可以更改該值。 –
好點。我沒有想到這一點。 – ajon
你的問題是:
但是,什麼是:
((c = getchar()) != EOF)
returens?
表達式((c = getchar()) != EOF)
是一個邏輯(或「布爾」)表達式 - 它是「真」或「假」。具體來說,它測試是否有東西不等於常量「EOF」。
「東西」是表達式(c = getchar())
。這是一項任務;它調用getchar()
函數並將返回值分配給變量c
。賦值的值是分配的值;因此,表達作爲一個整體是導致以下情況發生:
getchar()
叫c
EOF
EOF
,則while
聲明繼續運行。謝謝@David,但是你能告訴我與'\ n'相比什麼價值嗎?我理解while語句,並試圖理解在(c =='\ n')中比較哪些值 – MNY
到這裏看看:http://stackoverflow.com/questions/1782080/what-is-eof-in-the-c-programming-language – squiguy
嘗試,但它沒有help..thanks – MNY
你試圖問「EOF」是什麼值? – sth