声明:以下内容,在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,输入后自动加入结束符" "。
补充:
1. 数对于 scanf()函数,它的读入问题就要涉及到了缓冲区了。scanf函数是以删除的方式从缓冲区读取数据(缓冲区中存储来自标准输入的数据)。如果缓冲区是空的,就阻塞之,等待从键盘输入;并且scanf还能对数字输入忽略先导的空白符,如 和空格等(注意,对字符输入并不忽略先导字符,这个也是很自然的道理,因为 和空格在字符中都是合法的字符)。
2. scanf() 是有返回值的,它的返回值为正确读入的变量的数目;
getchar()函数:
经过我的实现,我的结论为:getchar()函数从缓冲区读取一个字符,它什么时候读取呢,只要缓冲区里进入回车(有的系统换行,反正吧我的linux下为换行)以后它就会读取。它的返回值为什么呢?为读取字符的 ASCII的值;下面是我实现程序:
// 源码: 1 #include<stdio.h> 2 int main() { 3 int a; 4 printf("hello,world "); 5 scanf("%d", &a); 6 printf("%d ",a); 7 printf("%d ", getchar()); 8 printf("%d ", getchar()); 9 printf("%d ", getchar()); 10 printf("%d ", getchar()); 11 printf("%d ", getchar()); 12 printf("i am "); 13 printf("hello,world "); 14 printf("hello,world "); 15 printf("hello,world "); 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 个字符时结束,并在最后补充' ';如果该行字符数小于等于 size-1,则读取所有字符,并在最后补充 ' '。即,每次最多读取 size-1 个字符。
- stream为文件流指针。
【返回值】读取成功,返回读取到的字符串,即string;失败或读到文件结尾返回NULL。因此我们不能直接通过fgets()的返回值来判断函数是否是出错而终止的,应该借助feof()函数或者ferror()函数来判断。
注意:fgets()与gets()不一样,不仅仅是因为gets()函数只有一个参数 FILE *stream,更重要的是,fgets()可以指定最大读取的字符串的个数,杜绝了gets()使用不当造成缓存溢出的问题。1 #include<stdio.h> 2 int main() { 3 char str[10]; 4 fgets(str, 10, stdin); 5 printf("%s ", str); 6 7 return 0; 8 }输出:
yinheyi@ubuntu:~/learn/c_language/1$ ./test.out asd asd yinheyi@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 ␡ ^? 删除