//p04.c --- using variable (使用變數)讀取資料來處理 /// 這程式故意寫了很多 Bug (錯誤, 錯蟲!) /// 不過這些 Bug 在 編譯器(compiler)都看不出, 所以編譯時都不會有錯喔! /// 這些也不是Logical邏輯上的 Bug, 是因為用錯 scanf 的 Bug ! /// 請研究並思考該些 Bug, 若有不懂就舉手發問! //@CopyLeft by tsaiwn@csie.nctu.edu.tw // 但是這程式每執行一次只有讀一資料處理後就結束, 要如何直重複做? #include #include double x; // 注意 這是兩倍準的實數, 佔用 64 bits float y; // 這是一倍準的實數, 佔用 32 bits /// 關於實數在電腦內的格式請上網用 gogle.com 查詢 "IEEE754" int main( ) { // 大多數 main program 都這樣開頭 printf("Give me x (輸入 2 看看): "); scanf("%lf", x); // 錯! x 是 x 的內容值, 你要把 x 的位置傳過去! // 通常上面這句會使程式當掉! 因把 x 內容當作位置是很嚴重的錯誤! scanf("%f", &x); // 錯! double 用%lf, float 要用 %f printf(" sqrt 根號 %f =%f\n ", x, sqrt(x) ); printf("Give me y: "); scanf("%lf", &y); // 錯錯錯! 可能會使程式當掉! y 是float要用%f // 因為你寫 %lf 會讓 scanf( ) 誤會說 y 有 64 個 bits ! printf("Bye bye!\n Hit ENTER key..."); getchar( ); // 企圖從鍵盤讀取一個 char 以便等 User 按 ENTER return 0; // 告知作業系統(OS)表示我們這主程式正常結束 } // main( // /// scanf( ) 也是別人事先寫好的 程式庫函數(Library function; 函式); /// 它的第一個參數是含有format描述的字串 (format specifier), 用 % 表示 /// %f 表示一個一倍準的實數 float, %lf 表示一個兩倍準的實數 double; /// %d 表示要讀取一個整數 int; %ld 表示 long; %hd 表示 short /// %c 表示要讀取一個文字符號 char; %s 表示要讀取一個字串 /// 注意喔, %s 讀取的字串無法含有空白(包括廣義的空白) ////// /****** Running Script D:\test> path C:\TC\BIN;%path% D:\test> path C:\Dev-Cpp\bin;%path% D:\test> gcc p04.c D:\test> a.exe Give me x (輸入 2 看看): haha sqrt 根號 0.000000 =0.000000 Give me y: Bye bye! Hit ENTER key... D:\test> a.exe Give me x: 2 a.exe 已經停止運作 ... D:\test> tcc p04.c Turbo C++ Version 3.00 Copyright (c) 1992 Borland International p04.c: Turbo Link Version 5.0 Copyright (c) 1992 Borland International Available memory 4106928 D:\test> p04.exe Give me x: 2 Null pointer assignment **************************************/