基本的输入输出函数介绍
聲明:以下內容,在linux系統下操作的,編譯器為gcc.
?
scanf()函數:
當控制字符為 %c 時,它會讀入你輸入的空格、回車等鍵的;
當用%d 時:默認分隔符(分隔也是結束的標志嘛)是所有的 white-spaces(空格、回車、制表);
???? 注意:1. 輸入時,應該用空格或著 制表符分開,不能用;或,哦;
???????????? 2. 如果要用的話,你的輸入應該與? scanf函數中的控制串能對應起來。否則的話,它就只會讀入一部分正確的,然后退出。
?????????????? 比如: scanf(“%d, %d”,&a, &b);,? 當我們輸入時,也應該是這樣的,如:23,45;如果輸入為23 45 的話,那么它只會正確讀入 a=23,然后就停止了,即正確讀入了一個數;
???????????? 3. 或著:scanf("%d%*c%d",&x,&y), %*表示讀取指定類型的數據c(表示字符)但是不保存。這樣的話,就可以用你想用的字符進行分隔了;
當控制符為 %s 時,默認分隔符(分隔也是結束的標志嘛)是所有的 white-spaces,輸入后自動加入結束符"\0"。
?
補充:
1. 數對于 scanf()函數,它的讀入問題就要涉及到了緩沖區了。scanf函數是以刪除的方式從緩沖區讀取數據(緩沖區中存儲來自標準輸入的數據)。如果緩沖區是空的,就阻塞之,等待從鍵盤輸入;并且scanf還能對數字輸入忽略先導的空白符,如\n\t和空格等(注意,對字符輸入并不忽略先導字符,這個也是很自然的道理,因為\n\t和空格在字符中都是合法的字符)。
2. scanf() 是有返回值的,它的返回值為正確讀入的變量的數目;
?
getchar()函數:
經過我的實現,我的結論為:getchar()函數從緩沖區讀取一個字符,它什么時候讀取呢,只要緩沖區里進入回車(有的系統換行,反正吧我的linux下為換行)以后它就會讀取。它的返回值為什么呢?為讀取字符的 ASCII的值;下面是我實現程序:
// 源碼: 1 #include<stdio.h>2 int main() {3 int a;4 printf("hello,world\n");5 scanf("%d", &a);6 printf("%d\n",a);7 printf("%d\n", getchar());8 printf("%d\n", getchar());9 printf("%d\n", getchar());10 printf("%d\n", getchar());11 printf("%d\n", getchar()); 12 printf("i am \n");13 printf("hello,world\n");14 printf("hello,world\n");15 printf("hello,world\n");16 17 return 0;18 }//輸出: hello,world 24 //阻塞中,然后輸入24; 24 10 //這個10吧,對應在linux下的換行的ASCII的值; a //阻塞中,然后輸入a; 97 10 b //阻塞中,然后輸入b; 98 10 i am hello,world hello,world hello,world?
還一一個getch函數,它吧,不在C標準庫中,我們其實用getchar()就可以了吧。
?
gets()與fgets()函數:
對于gets()函數,gcc下直接沒法用,因為它不安全,可以導致程序崩潰,改用fgets()函數;
頭文件:include<stdio.h>
fgets()函數用于從文件流中讀取一行或指定個數的字符,其原型為:
??? char * fgets(char * string, int size, FILE * stream);
參數說明:
- string為一個字符數組,用來保存讀取到的字符。
- size為要讀取的字符的個數。如果該行字符數大于size-1,則讀到 size-1 個字符時結束,并在最后補充' \0';如果該行字符數小于等于 size-1,則讀取所有字符,并在最后補充 '\0'。即,每次最多讀取 size-1 個字符。
- stream為文件流指針。
【返回值】讀取成功,返回讀取到的字符串,即string;失敗或讀到文件結尾返回NULL。因此我們不能直接通過fgets()的返回值來判斷函數是否是出錯而終止的,應該借助feof()函數或者ferror()函數來判斷。
注意:fgets()與gets()不一樣,不僅僅是因為gets()函數只有一個參數 FILE *stream,更重要的是,fgets()可以指定最大讀取的字符串的個數,杜絕了gets()使用不當造成緩存溢出的問題。
輸出:
yinheyi@ubuntu:~/learn/c_language/1$ ./test.out asd asdyinheyi@ubuntu:~/learn/c_language/1$ ./test.out safdsdafsdaaaaaaaa safdsdafs?
?
?
文件的讀取:
?
?
?
?
?
ASCII 表:
0000 0000 0 00 NUL ? ^@ 空字符(Null) 0000 0001 1 01 SOH ? ^A 標題開始 0000 0010 2 02 STX ? ^B 本文開始 0000 0011 3 03 ETX ? ^C 本文結束 0000 0100 4 04 EOT ? ^D 傳輸結束 0000 0101 5 05 ENQ ? ^E 請求 0000 0110 6 06 ACK ? ^F 確認回應 0000 0111 7 07 BEL ? ^G 響鈴 0000 1000 8 08 BS ? ^H 退格 0000 1001 9 09 HT ? ^I 水平定位符號 0000 1010 10 0A LF ? ^J 換行鍵 0000 1011 11 0B VT ? ^K 垂直定位符號 0000 1100 12 0C FF ? ^L 換頁鍵 0000 1101 13 0D CR ? ^M Enter鍵 0000 1110 14 0E SO ? ^N 取消變換(Shift out) 0000 1111 15 0F SI ? ^O 啟用變換(Shift in) 0001 0000 16 10 DLE ? ^P 跳出數據通訊 0001 0001 17 11 DC1 ? ^Q 設備控制一(XON 啟用軟體速度控制) 0001 0010 18 12 DC2 ? ^R 設備控制二 0001 0011 19 13 DC3 ? ^S 設備控制三(XOFF 停用軟體速度控制) 0001 0100 20 14 DC4 ? ^T 設備控制四 0001 0101 21 15 NAK ? ^U 確認失敗回應 0001 0110 22 16 SYN ? ^V 同步用暫停 0001 0111 23 17 ETB ? ^W 區塊傳輸結束 0001 1000 24 18 CAN ? ^X 取消 0001 1001 25 19 EM ? ^Y 連線介質中斷 0001 1010 26 1A SUB ? ^Z 替換 0001 1011 27 1B ESC ? ^[ 退出鍵 0001 1100 28 1C FS ? ^\ 文件分割符 0001 1101 29 1D GS ? ^] 群組分隔符 0001 1110 30 1E RS ? ^^ 記錄分隔符 0001 1111 31 1F US ? ^_ 單元分隔符 0010 0000 32 20 (space) 0010 0001 33 21 ! 0010 0010 34 22 " 0010 0011 35 23 # 0010 0100 36 24 $ 0010 0101 37 25 % 0010 0110 38 26 & 0010 0111 39 27 ' 0010 1000 40 28 ( 0010 1001 41 29 ) 0010 1010 42 2A * 0010 1011 43 2B + 0010 1100 44 2C , 0010 1101 45 2D - 0010 1110 46 2E . 0010 1111 47 2F / 0011 0000 48 30 0 0011 0001 49 31 1 0011 0010 50 32 2 0011 0011 51 33 3 0011 0100 52 34 4 0011 0101 53 35 5 0011 0110 54 36 6 0011 0111 55 37 7 0011 1000 56 38 8 0011 1001 57 39 9 0011 1010 58 3A : 0011 1011 59 3B ; 0011 1100 60 3C < 0011 1101 61 3D = 0011 1110 62 3E > 0011 1111 63 3F ? 0100 0000 64 40 @ 0100 0001 65 41 A 0100 0010 66 42 B 0100 0011 67 43 C 0100 0100 68 44 D 0100 0101 69 45 E 0100 0110 70 46 F 0100 0111 71 47 G 0100 1000 72 48 H 0100 1001 73 49 I 0100 1010 74 4A J 0100 1011 75 4B K 0100 1100 76 4C L 0100 1101 77 4D M 0100 1110 78 4E N 0100 1111 79 4F O 0101 0000 80 50 P 0101 0001 81 51 Q 0101 0010 82 52 R 0101 0011 83 53 S 0101 0100 84 54 T 0101 0101 85 55 U 0101 0110 86 56 V 0101 0111 87 57 W 0101 1000 88 58 X 0101 1001 89 59 Y 0101 1010 90 5A Z 0101 1011 91 5B [ 0101 1100 92 5C \ 0101 1101 93 5D ] 0101 1110 94 5E ^ 0101 1111 95 5F _ 0110 0000 96 60 ` 0110 0001 97 61 a 0110 0010 98 62 b 0110 0011 99 63 c 0110 0100 100 64 d 0110 0101 101 65 e 0110 0110 102 66 f 0110 0111 103 67 g 0110 1000 104 68 h 0110 1001 105 69 i 0110 1010 106 6A j 0110 1011 107 6B k 0110 1100 108 6C l 0110 1101 109 6D m 0110 1110 110 6E n 0110 1111 111 6F o 0111 0000 112 70 p 0111 0001 113 71 q 0111 0010 114 72 r 0111 0011 115 73 s 0111 0100 116 74 t 0111 0101 117 75 u 0111 0110 118 76 v 0111 0111 119 77 w 0111 1000 120 78 x 0111 1001 121 79 y 0111 1010 122 7A z 0111 1011 123 7B { 0111 1100 124 7C | 0111 1101 125 7D } 0111 1110 126 7E ~ 0111 1111 127 7F DEL ? ^? 刪除總結
以上是生活随笔為你收集整理的基本的输入输出函数介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LAPM编译安装2
- 下一篇: linux中rpm命令管理