這期主要講printf 和scanf 族類函式。
返回值首先,這兩個函式都是有返回值的,printf函式返回成功輸出的字元個數,scanf函式返回成功接收的引數個數,如果接收到ctrl + z, 代表檔案末尾eof, 返回-1。
#include
intmain()
printf
("eof返回值or等價為%d\n"
, a)
;return0;
}
輸出顯示如下,其中666為輸入。
空格、回車匹配
現在的問題是scanf函式一遇到費字元【空格,回車】,就會直接轉為eof??
實際上scanf函式是可以讀入空格和回車的,其中如果格式化字串中帶有空格,如"\n%d", 就要先讀入乙個回車再輸入數字。然後如果**如下面形式:
scanf
("%d"
,&x)
;scanf
("%c"
,&y)
;
現象
解決那如何讓scanf函式讀入帶空格字串呢?這裡要用到正規表示式,詳細可以參考博文
類似的,表示取出所有非回車的字元**:
scanf
("%*[^\n]");
//表示讀入所有不是換行的字串,這些都不儲存,然後返回
scanf
("%*c");
//表示讀入乙個字元,但是這個字元不儲存到變數裡,這裡表示取出\n
#include
intmain()
;while
(scanf
("%[^\n]s"
, str)
!=eof
)return0;
}
顯示
有乙個問題,不能使用scanf("\n")來吃掉回車,執行時,每次輸入第二個語句,輸出第乙個語句,好像scanf在檢測到回車以後仍然停留在原地,也沒有清空快取區。這是乙個很奇怪的地方qaq。
錯誤的輸出顯示:
限制輸入長度:
限制長度以外的字元將被留在緩衝區,而且會匹配進下一次輸入,%*d的意思是不計入變數,丟棄。
#include
intmain()
顯示:
遺留問題:浮點數
double類記得匹配"%lf"型。
其他的看**就可以。
#include
intmain()
顯示:
sprintf 與fprintf
sprintf可以用於字串拼接,類似:
sprintf
(s,"%d + %d + %d",1
,2,3
);
fprintf用於將輸出重定向到檔案中, 特殊的檔案指標有stdout,stderr
fprintf
(stdout
,"hello! %s"
,"man"
);
會將輸出列印到控制台上,與printf效果一樣。 C語言輸入輸出
i o函式 printf 和scanf 輸出程式 函式的呼叫是在c語言標頭檔案 stdio.h 中包含這些像printf 輸入輸出 printf 一般形式如下 printf 格式化字串 輸出參數列 鍵盤輸入函式 顯示器輸出函式printf putchar puts 磁碟檔案操作creatnew 建立...
C語言 輸入 輸出
當我們提到輸入時,這意味著要向程式填充一些資料。輸入可以是以檔案的形式或從命令列中進行。c 語言提供了一系列內建的函式來讀取給定的輸入,並根據需要填充到程式中。當我們提到輸出時,這意味著要在螢幕上 印表機上或任意檔案中顯示一些資料。c 語言提供了一系列內建的函式來輸出資料到計算機螢幕上和儲存資料到文...
C語言 輸入輸出
getchar 函式只能接受單個字元 scanf 格式控制字串 位址表列 輸入時要用乙個以上的空格或回車鍵最為每兩個輸入數之間的間隔 格式字串形式 輸入資料寬度 長度 型別格式 字元意義 d輸入十進位制整數 o輸入八進位制整數 x輸入十六進製制整數 u輸入無符號十進位制整數 f 或 e 輸入實型數 ...