C 语言中的输入输出介绍

来源:互联网 发布:淘宝打假套话 编辑:程序博客网 时间:2024/06/05 19:41

C 语言中的输入输出:
   1)格式输入:
     scanf()
          格式为scanf(“格式字符串”,输入列表)  //不能规定精度,只能是原样输入
          空白字符:Tab  回车  空格

 scanf(" %c",c);//忽略掉全部的空白字符 (空格、回车、Tab)
    若后面有空格,则必须输入非空白的字符才可以退出,因此不建议用。
       eg:scanf("%d", &a);
           scanf("%s", str); //遇到空白字符就会截断
           scanf("%c", &ch);  //接收任何字符,必须按照控制格式
           scanf("%f", &f);   //不能规定精度

        键盘-->键盘缓冲区-->输入缓冲区-->scanf
  如果输入缓冲区有数据,scanf直接读,如果没有数据,scanf等待(阻塞)
  除了读字符c%,其他的读取都会自动忽略空白字符(空格,Tab,换行)
  d%时若读入的是字符,则会出现死循环,是因为d%不会读取字符,而字符始终在输入缓冲区中。因此需要清空缓冲区,或者把变量赋初值。
  
  清空输入缓冲区:  scanf("%*[^\n]");//忽略掉第一个回车之前的
        scanf("%*c");
        * 表示禁止输入
          
      printf()
      内存数据-->输出缓冲区-->标准输出设备(显示器)
    
   输出缓冲区中的数据在以下情况下会送到输出设备上:
     1、程序结束时
     2、输出换行时
     3、缓冲区满时
     4、有输入时
     5、调用函数fflush()时
     fflush(NULL)//参数为NULL时,清空所有的缓冲区

        printf转换说明
        % 标志  最小字段宽度  精度  长度修饰  转换说明符
         标志
       -左对齐(默认右对齐)
       +有符号数总是以+,-号开始
       #以0开头的八进制,以0x开头的十六进制
       0用前导零填充

  转换说明中的宽度和精度可以用*号表示,这时,宽度和精度的值通过转换下一个参数来计算,该参数必须为int.
  如:printf("%.*s", max,s);

           eg:
           printf("%d", a);
           printf("%s", str);//遇到结束符才结束
           printf("%c", ch);
           printf("%.2", f);  //可定义精度

   stdout 和stderr的区别:
      1、stdout带缓冲区,stderr不带缓冲区
      2、stdout可以重定向,stderr不可以重定向
      3、什么时候stdout缓冲区会清空:
 1)缓冲区清空时,缓冲区中的内容会送到显示器
 2)当输出换行时清空
 3)当等待用户输入时清空
 4)当调用fflush函数时清空
 5)当程序运行结束时清空
 6)当缓冲区满时会清空


   2) getchar()  //用于从键盘接收一个字符,并返回回来
        eg:char ch;
           ch = getchar();
      putchar()  //用于输出一个字符到屏幕上
        eg:putchar(ch);
      getch()   //用于从键盘接收一个字符,多用于暂停程序,输入任意字符后,程序继续执行
 
   3) gets() //用于从键盘接收一个字符串,直到遇到回车停止接收,并且自动舍弃回车符
        eg: char str[50] = {0};
            gets(str);
       puts() //用于输出一个字符串到屏幕上
        eg: puts(str);
       
   4) getc:从文件读字符,并返回回来
   putc:把字符读到文件中去
    
   ungetc:把刚读到的字符返还回去,主要是改变在文件中的指示器位置
    
   5) 
  fread()://把文件的内容读到内存块中
  fwrite()://把内存块的内容写到文件中去
 
 
   6) IO(对文件进行输入和输出)
        stdin (标准输入缓冲区)
        stdout(标准输出缓冲区)  
        stderr(标准错误输出)//无缓冲区
       
   7)
        格式化输入和输出
            scanf  //从键盘(从输入缓冲区)
            fscanf //从文件中读取  
            sscanf //从字符串中读取
           
            printf
            fprintf
               eg:fprintf(stderr, "Error: data file can't be opened.\n");//打印错误信息
            sprintf  //将任何数据按照某形式转换成字符串
               eg: char str[20];int i_arg = 12345;sprintf(buf,"%-6d",i_arg);
                   char str[20];double d_arg = 3.1415926;sprintf(str,"%6.2f",d_arg);
           
        非格式化输入和输出
            getc/putc  单个字符的输入和输出(文件)
            getchar/putchar  单个字符(键盘和显示器)
           
            gets/puts  字符串行的输入和输出(标准设备)
            fgets/fputs  字符串行 (文件)
               char *fgets(char *s, int n, FILE *stream);   
               从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。   
               形参注释:*s结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针
           
            fread/fwrite 字节的输入和输出(内存<-->文件)
           
            fseek:文件当前定位
       eg: 
          main()  
          {  
                    char   *s,   m[20];  
                    int   i;  
                    FILE     *fp;  
                    fp=fopen( "test.dat ",   "r ");         /*打开文字文件只读*/  
                    fgets(s,   24,   fp);                   /*从文件中读取23个字符*/  
                    printf( "%s ",   s);                    /*输出所读的字符串*/  
                    fscanf(fp,   "%d ",   &i);              /*读取整型数*/  
                    printf( "%d ",   i);                    /*输出所读整型数*/  
                    putchar(fgetc(fp));                     /*读取一个字符同时输出*/  
                    fgets(m,   17,   fp);                   /*读取16个字符*/  
                    puts(m);                                /*输出所读字符串*/  
                    fclose(fp);                             /*关闭文件*/  
                    getch();                                /*等待任一键*/  
          } 

   8)字符串的输入输出:
    输出:
            printf("%s\n", str);
            printf("%.6s\n", str);//保留6个字符
            //前面空5个空格,并打印5个字符,至少保证10个宽度,后面的数字表示打印多少个字符。
            printf("%10.5s\n", str);
            puts(str);
           
    输入:
        scanf("%s", str);
        //当遇到空格,换行等空白字符时结束输入
        gets(str);//读入一行字符,而且不会在开始读字符之前跳过空白,会持续读到换行为止,并且会自动忽略换行,不会把换行符留在缓冲区中,但是它取走后不会保存,会自动丢弃。若在该函数之前缓冲区中已经有东西,注意清空缓冲区。
  
   9)
 转移字符:
    \n:换行
    \r:回车
    \t:水平制表    

 printf("格式字符串",...) 
  %i/%d    int
  %ld
  %hd
  %u
  %lu
  
  %f
  %lf
  %g
  %e
  %E
  
  %%    打印%
  

原创粉丝点击