[問題] 初學者對C語言函數的理解

看板C_and_CPP (C/C++)作者 (貓熊醬)時間14年前 (2011/08/17 23:19), 編輯推噓1(1015)
留言16則, 6人參與, 最新討論串1/1
以下是洪維恩老師<<C語言教學手冊>>的範例4-20, ========================================================================== #include<stdio.h>; #include<stdlib.h>; int main(void) { int num; char chr; printf("key in an integer:\n"); scanf("%d",&num); fflush(stdin); printf("key in a character:\n"); scanf("%c",&chr); printf("the integer is %d,the ASCII of char is %d\n",num,chr); system("pause"); return 0; } =========================================================================== 小弟的問題是... 上式紅色的部分為何沒有加引號 (" ") 而綠色的函數在括號中還要加引號, 最後在return 0後,卻沒括號也沒引號 為何為有此分別??? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.9.202.31

08/17 23:22, , 1F
引號代表它是「字串」,而 void 是 C 的關鍵字
08/17 23:22, 1F

08/17 23:23, , 2F
就像你使用 int 不會寫成 "int" 一樣
08/17 23:23, 2F

08/17 23:24, , 3F
stdin 其實是個變數,就像你的 num 並沒寫成 "num"
08/17 23:24, 3F

08/17 23:24, , 4F
這些元件都先搞清楚, 再來看程式碼
08/17 23:24, 4F

08/17 23:25, , 5F
而 return 並不是一個 function
08/17 23:25, 5F

08/17 23:28, , 6F
只是function內很重要的東西罷了
08/17 23:28, 6F
多謝解答! 小弟非本科系, 在眾人推薦下買了洪老師的書來入門, 因為週遭沒同學也沒老師可以討論, 如果提問有不妥當的地方還請包涵~

08/17 23:44, , 7F
注意一下 fflush(stdin); 不是好習慣
08/17 23:44, 7F
書上是說~ 可以用來清空緩衝區內的資料, 而書裡的上一個範例則是在%c前空一格, 以跳過不可列印字元, 目前我只有學過這兩種方法...

08/17 23:53, , 8F
fflush(stdin)不見得能永久使用 看環境...
08/17 23:53, 8F
謝謝提醒! 未來在使用上會多注意

08/17 23:59, , 9F
原問題 #1EBh9Ekl 解決方法 #1EBiHamA 參考一下
08/17 23:59, 9F
哈哈..眼花了... 先將那兩篇收到信箱慢慢消化 ※ 編輯: pandajohn 來自: 124.9.202.31 (08/18 00:07)

08/18 08:27, , 10F
補充一下,#1EBiHamA提到用getchar()去移除未讀取的字串
08/18 08:27, 10F

08/18 08:29, , 11F
跟buffer的觀念有關.資料在讀取前,通常都會放在緩衝區
08/18 08:29, 11F

08/18 08:31, , 12F
然後用scanf讀取資料時,碰到空白和tab時就停止讀取
08/18 08:31, 12F

08/18 08:32, , 13F
有時剩於資料留在緩衝區(buffer).因此t大用getchar把
08/18 08:32, 13F

08/18 08:33, , 14F
剩餘資料讀出來.
08/18 08:33, 14F

08/18 08:46, , 15F
厄,有些贅字要麻煩原po過濾一下,最近塞太多東西在腦子
08/18 08:46, 15F

08/18 08:46, , 16F
國文能力變得更差
08/18 08:46, 16F
謝謝你的講解 ※ 編輯: pandajohn 來自: 163.27.62.166 (08/18 11:28)
文章代碼(AID): #1EIzlzc8 (C_and_CPP)
文章代碼(AID): #1EIzlzc8 (C_and_CPP)