看板 C_and_CPP 關於我們 聯絡資訊
小弟是C語言的新手 我在書上看到一個迴圈的程式碼感到有些疑問 想要釐清一個迴圈的觀念 所以想要請各位前輩給一下指導 程式碼: #include <stdio.h> #include <stdlib.h> int main(void) { char ch; while(ch!=17){ ch=getch(); printf("ASCII of ch=%d\n", ch); } printf("你已經按了Ctrl+q...\n"); system("pause"); return 0; } 感到疑問的地方: 本來以為變數ch沒有設值,迴圈的判斷式無法判斷而出現錯誤 但結果卻可以正常執行 然後我把條件改成ch==17 跑出來的結果是跳過迴圈這段 代表雖然ch沒有值,但判斷式還是有在判斷ch的值是否有符合條件 目前猜測可以程式執行的原因可能有2 1. ch的殘值=/=17 所以進入迴圈 2. ch是空值,空值=/=17 所以進入迴圈 想請問一下各為前輩原因是那種?還是另有正解? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.167.130.32 ※ 編輯: CloudyWing 來自: 218.167.130.32 (11/19 02:07) ※ 編輯: CloudyWing 來自: 218.167.130.32 (11/19 02:08)
VictorTom:沒有變數裡沒有值這回事, ch變數佔1 byte的話, 其值必為 11/19 02:08
VictorTom:-128~+127中間的某一個; 但是一個沒有被賦過值的變數其 11/19 02:08
VictorTom:記錄的值為何??就是不知道, 這個例子的情況多半是程式執 11/19 02:09
VictorTom:行時stack裡某塊的殘值; 某些compiler(如VC)會在debug 11/19 02:10
VictorTom:built的binary裡替所有宣告的變數給與特定初值(讓它自己 11/19 02:10
VictorTom:偵錯等用途), 不過基本上不能預期未初始化的區域變數值. 11/19 02:12
VictorTom:小弟不太確定你的"空值"指得是什麼, 基本上應該是1.對:) 11/19 02:13
我指的空值就是你說的沒有值 XD 所以這種變數未設值不是正常應該用得寫法? 甚至極低的機率發生因殘值=17 所以不執行迴圈的可能? 補充一下我是用Dev-C++編譯 ※ 編輯: CloudyWing 來自: 218.167.130.32 (11/19 02:18)
VictorTom:PS. 或說0x00~0xFF. 這個case只會有無法預期的結果, 並 11/19 02:17
VictorTom:不會有讓程式不能執行的錯誤. 11/19 02:18
VictorTom:兩個 ? 的答案都是對的:) 11/19 02:21
VictorTom:置底十三誡的第一誡就是在講這個東西, 印象中有的 11/19 02:22
VictorTom:compiler也可能會在遇到這種情形時丟warning給你@_@" 11/19 02:22
我有看到過這一條 所以我才會對於書上提供這個程式碼又可以正常執行感到疑惑 感謝前輩的指導 ※ 編輯: CloudyWing 來自: 218.167.130.32 (11/19 02:25) ※ 編輯: CloudyWing 來自: 218.167.130.32 (11/19 02:29)
x000032001:這種狀況就用這個吧http://codepad.org/SnVyxelZ 11/19 08:01
x000032001:就算是17也不會怎樣 @@ 11/19 08:01
wfgh:getch非標準函式庫的東西,盡量不要用他 11/19 08:53