[問題] 一個基本的迴圈問題 -已解決-

看板C_and_CPP作者 (孤單ㄉ翼)時間15年前 (2010/11/19 02:05), 編輯推噓2(2013)
留言15則, 3人參與, 最新討論串1/1
小弟是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)

11/19 02:08, , 1F
沒有變數裡沒有值這回事, ch變數佔1 byte的話, 其值必為
11/19 02:08, 1F

11/19 02:08, , 2F
-128~+127中間的某一個; 但是一個沒有被賦過值的變數其
11/19 02:08, 2F

11/19 02:09, , 3F
記錄的值為何??就是不知道, 這個例子的情況多半是程式執
11/19 02:09, 3F

11/19 02:10, , 4F
行時stack裡某塊的殘值; 某些compiler(如VC)會在debug
11/19 02:10, 4F

11/19 02:10, , 5F
built的binary裡替所有宣告的變數給與特定初值(讓它自己
11/19 02:10, 5F

11/19 02:12, , 6F
偵錯等用途), 不過基本上不能預期未初始化的區域變數值.
11/19 02:12, 6F

11/19 02:13, , 7F
小弟不太確定你的"空值"指得是什麼, 基本上應該是1.對:)
11/19 02:13, 7F
我指的空值就是你說的沒有值 XD 所以這種變數未設值不是正常應該用得寫法? 甚至極低的機率發生因殘值=17 所以不執行迴圈的可能? 補充一下我是用Dev-C++編譯 ※ 編輯: CloudyWing 來自: 218.167.130.32 (11/19 02:18)

11/19 02:17, , 8F
PS. 或說0x00~0xFF. 這個case只會有無法預期的結果, 並
11/19 02:17, 8F

11/19 02:18, , 9F
不會有讓程式不能執行的錯誤.
11/19 02:18, 9F

11/19 02:21, , 10F
兩個 ? 的答案都是對的:)
11/19 02:21, 10F

11/19 02:22, , 11F
置底十三誡的第一誡就是在講這個東西, 印象中有的
11/19 02:22, 11F

11/19 02:22, , 12F
compiler也可能會在遇到這種情形時丟warning給你@_@"
11/19 02:22, 12F
我有看到過這一條 所以我才會對於書上提供這個程式碼又可以正常執行感到疑惑 感謝前輩的指導 ※ 編輯: CloudyWing 來自: 218.167.130.32 (11/19 02:25) ※ 編輯: CloudyWing 來自: 218.167.130.32 (11/19 02:29)

11/19 08:01, , 13F
這種狀況就用這個吧http://codepad.org/SnVyxelZ
11/19 08:01, 13F

11/19 08:01, , 14F
就算是17也不會怎樣 @@
11/19 08:01, 14F

11/19 08:53, , 15F
getch非標準函式庫的東西,盡量不要用他
11/19 08:53, 15F
文章代碼(AID): #1CvMhCxZ (C_and_CPP)