声明:以下内容,在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 #include2 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,world24 //阻塞中,然后输入24;2410 //这个10吧,对应在linux下的换行的ASCII的值;a //阻塞中,然后输入a;9710 b //阻塞中,然后输入b;9810i am hello,worldhello,worldhello,world
还一一个getch函数,它吧,不在C标准库中,我们其实用getchar()就可以了吧。
gets()与fgets()函数:
对于gets()函数,gcc下直接没法用,因为它不安全,可以导致程序崩溃,改用fgets()函数;
头文件:include<stdio.h>
fgets()函数用于从文件流中读取一行或指定个数的字符,其原型为: char * fgets(char * string, int size, FILE * stream);参数说明:【返回值】读取成功,返回读取到的字符串,即string;失败或读到文件结尾返回NULL。因此我们不能直接通过fgets()的返回值来判断函数是否是出错而终止的,应该借助feof()函数或者函数来判断。注意:fgets()与不一样,不仅仅是因为gets()函数只有一个参数 FILE *stream,更重要的是,fgets()可以指定最大读取的字符串的个数,杜绝了gets()使用不当造成缓存溢出的问题。
- string为一个字符数组,用来保存读取到的字符。
- size为要读取的字符的个数。如果该行字符数大于size-1,则读到 size-1 个字符时结束,并在最后补充' \0';如果该行字符数小于等于 size-1,则读取所有字符,并在最后补充 '\0'。即,每次最多读取 size-1 个字符。
- stream为文件流指针。
1 #include2 int main() { 3 char str[10]; 4 fgets(str, 10, stdin); 5 printf("%s\n", str); 6 7 return 0; 8 } 输出:
yinheyi@ubuntu:~/learn/c_language/1$ ./test.out asdasdyinheyi@ubuntu:~/learn/c_language/1$ ./test.out safdsdafsdaaaaaaaasafdsdafs
文件的读取:
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 00011 0001 49 31 10011 0010 50 32 20011 0011 51 33 30011 0100 52 34 40011 0101 53 35 50011 0110 54 36 60011 0111 55 37 70011 1000 56 38 80011 1001 57 39 90011 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 A0100 0010 66 42 B0100 0011 67 43 C0100 0100 68 44 D0100 0101 69 45 E0100 0110 70 46 F0100 0111 71 47 G0100 1000 72 48 H0100 1001 73 49 I0100 1010 74 4A J0100 1011 75 4B K0100 1100 76 4C L0100 1101 77 4D M0100 1110 78 4E N0100 1111 79 4F O0101 0000 80 50 P0101 0001 81 51 Q0101 0010 82 52 R0101 0011 83 53 S0101 0100 84 54 T0101 0101 85 55 U0101 0110 86 56 V0101 0111 87 57 W0101 1000 88 58 X0101 1001 89 59 Y0101 1010 90 5A Z0101 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 a0110 0010 98 62 b0110 0011 99 63 c0110 0100 100 64 d0110 0101 101 65 e0110 0110 102 66 f0110 0111 103 67 g0110 1000 104 68 h0110 1001 105 69 i0110 1010 106 6A j0110 1011 107 6B k0110 1100 108 6C l0110 1101 109 6D m0110 1110 110 6E n0110 1111 111 6F o0111 0000 112 70 p0111 0001 113 71 q0111 0010 114 72 r0111 0011 115 73 s0111 0100 116 74 t0111 0101 117 75 u0111 0110 118 76 v0111 0111 119 77 w0111 1000 120 78 x0111 1001 121 79 y0111 1010 122 7A z0111 1011 123 7B {0111 1100 124 7C |0111 1101 125 7D }0111 1110 126 7E ~0111 1111 127 7F DEL ␡ ^? 删除