zoukankan      html  css  js  c++  java
  • 基本的输入输出函数介绍

    声明:以下内容,在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 in0001 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     ␡     ^?     删除
  • 相关阅读:
    Hibernate_一对多映射_2
    Hibernate框架_1 单表映射 _2
    JS
    Hibernate框架_1 单表映射
    Spring_1
    Javabean
    JAVA注解(JDK1.5开始)
    JAVA方法的反射
    JAVA-Reflect(反射)1
    Android初学:Gradle 'HelloWorld' project refresh failed
  • 原文地址:https://www.cnblogs.com/yinheyi/p/6286106.html
Copyright © 2011-2022 走看看