博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基本的输入输出函数介绍
阅读量:5990 次
发布时间:2019-06-20

本文共 7117 字,大约阅读时间需要 23 分钟。

声明:以下内容,在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
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,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为一个字符数组,用来保存读取到的字符。
  • size为要读取的字符的个数。如果该行字符数大于size-1,则读到 size-1 个字符时结束,并在最后补充' \0';如果该行字符数小于等于 size-1,则读取所有字符,并在最后补充 '\0'。即,每次最多读取 size-1 个字符。
  • stream为文件流指针。

【返回值】读取成功,返回读取到的字符串,即string;失败或读到文件结尾返回NULL。因此我们不能直接通过fgets()的返回值来判断函数是否是出错而终止的,应该借助feof()函数或者函数来判断。
注意:fgets()与不一样,不仅仅是因为gets()函数只有一个参数 FILE *stream,更重要的是,fgets()可以指定最大读取的字符串的个数,杜绝了gets()使用不当造成缓存溢出的问题。

1 #include
2 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     ␡     ^?     删除

转载地址:http://zxjlx.baihongyu.com/

你可能感兴趣的文章
海西 · 云交付 DevOps实践落地方案
查看>>
Shell 通配符、元字符、转义符*****
查看>>
[uboot]uboot中am437对应的GPIO配置
查看>>
关于 ExpressRoute 的虚拟网络网关
查看>>
hystrix服务降级和服务熔断的区别
查看>>
【转】Ubuntu FireFox无法播放网页视频音乐的解决办法
查看>>
FEC详解三
查看>>
finecms同时调用子栏目和子栏目的文章怎么操作
查看>>
如何用公式编辑器快速打五角星符号
查看>>
CSS3边框圆角知识
查看>>
从面试官角度来告诉大家,哪些人能面试成功
查看>>
serialVersionUID的作用
查看>>
工作两三年,没目标了……
查看>>
request获取各种路径
查看>>
activiti实战--第一章--认识Activiti
查看>>
Linux下Shell命令的输出信息同时显示在屏幕和保存到日志文件中
查看>>
[LeetCode] Open the Lock 开锁
查看>>
Android深入四大组件(七)Service的绑定过程
查看>>
[SCSS] Pure CSS for multiline truncation with ellipsis
查看>>
【转】一种新的操作系统设计
查看>>