精華區beta ESOE-90 關於我們 聯絡資訊
有沒有交代習題? 我怎麼好像沒那個印象... E1) 以 scanf() 及 printf() 函式, 在螢幕上請使用者輸入一整數, 如 "123", 然後在將其輸入的整數顯示在螢幕上. # include <stdio.h> int main() { int i; printf("Please enter an integer:\n"); scanf("%d", &i); printf("I have just got number %d.\n", i); return 0; } Common Errors) @ 請宣告為 int main(), 不要用 void main(). @ scanf() 裡頭的 i 要加上 &. @ scanf("%d", &i); 誤寫為 scanf(&i); @ 不會宣告 int i; @ 對稱的運算子, (), <>, "", {} 少了一半. @ 忘了行尾的分號. @ return 0; 可以省略. @ int main() 也可以只寫成 main(). 給初學者的建議: 上面幾項先背下來吧. Advanced Problems) @ printf() 最好換行. DOS 的程式可以直接存取輸出入裝置, printf() 可以『所見即所得』. 然而在許多別的作業系統之下, 對於 I/O 有他們自己的哲學. 加上 '\n' 代表的是 carriage return, 相當於結束一個輸出入的動作. @ 常見的 main() 有四種形式... int main(void); int main(int argc, char **argv); int main(int argc, char **argv, char **env); void main(void); 只有前兩種是 ANSI C 所允許的. main() 是使用者看到的第一個函式. 但實際上在 main() 之前還有一段先行碼. (the C run-time startup code/main()'s caller) 而這段先行碼則是預設 main() 會回傳一個整數. DOS 接受後兩種 main(), 但其他系統則不見得. @ scanf() 是 buffered I/O function. 在讀取失敗之後並不會清除原先的緩衝區. 所以說如果打算允許錯誤輸入, 而把程式寫成 while (scanf("%d", &i) < 1) puts("Not an integer."); 會造成無窮迴圈. 錯誤, 但極可能可行的方法為 fflush(stdin); 實際上 fflush() 只保證能清除檔案的輸出緩衝區, 而不是輸入緩衝區. 然而許多 fflush() 的實作方式可以清除輸入緩衝區. 正確而且具移植性的方法是 fgets(s, sizeof s - 1, stdin); 把輸入緩衝區的資料讀走. @ 所有未經宣告的 C 函式都具有下列的型別... extern int function(void); 所以 int main() 的 int 可以忽略. @ 所有應當 return exp; 卻沒有這個 return statement 的函式. 它的回傳值沒有定義, 不見得是 0. @ main() 的回傳值是回傳給父行程. 這個回傳值主要是給父行程來判斷程式的執行有沒有出錯. 就慣例上來說, 0 代表程式正常結束. 其他的數值則是代表有某種錯誤發生. 這是 UNIX 慣例, 並不是規範, 但是最好遵守. -- 新詩練習:新鮮。踩破初春裡的狗大便;不經意的滄桑,滿溢著嫩黃的喜悅。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.224.160.129