欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C lang:character input and output (I/O)

程序员文章站 2022-06-04 20:38:31
Xx_Introduction Character input and output is by more line character conpose of the text flow Define name common use capital letter,easy read. The Sta ......

xx_introduction

  • character input and output is by more line character conpose of the text flow 
  • define name common use capital  letter,easy read.
  • the standard c library ----->provide i/o model ------>use character flow way.

ax_application

  • file copy,charater count,line count,word count

bx_method

  • i/o model common use getchar and putchar,interactive use of putchar and printf.
    1 getchar()     //read next character
    2 putcahr()     //print next character
    3 printf()        //print next(bunch) character
  • file copy
    • file copy version 1
       1 #include<stdio.h>
       2 
       3 int main()
       4 {
       5     int c;
       6     
       7     c = getchar();
       8     while(c != eof){
       9         putchar(c);
      10         c = getchar();
      11     }
      12 }
    • file copy version 2
       1 #include<stdio.h>
       2 
       3 int main()
       4 {
       5     int c;
       6     
       7     while((c = getchar())!= eof){
       8         putchar(c);
       9     }
      10 }

      != : unequal to. priority overtop assignment(=)             eof:end of file

    • conclusion:computer use bit storage of character and any data type.
    • assignment can portion of expression.
    • complex statement simple easy read,but so hard understand.
    • due to unequal to relational operator(!=) priority not overtop assignment(=),so c expression use bracket.
       1 #include <stdio.h>
       2 
       3 int main()
       4 {
       5     int c;
       6 
       7     while (c = getchar() != eof){
       8         printf("%d\n",c);
       9     }
      10     printf("%d - at eof\n",c);
      11     return 0;
      12 }

      if not use bracket,will priority operation eof,value by 1,if input end or else print "c - at eof".

    • print eof value programming
      1 #include <stdio.h>
      2 
      3 int main()
      4 {
      5     printf("eof is %d\n",eof);
      6     return 0;
      7 }

      character constant eof is in <stdio.h> file definition,value by -1 

    • C lang:character input and output (I/O)

    • in other system can by definition other value. 
  • charater count(2019-10-8 update)
    • character count version 1
       1 #include <stdio.h>
       2 
       3 int main()
       4 {
       5     // version 1
       6     long nc;
       7 
       8     nc = 0;
       9     while (getchar() != eof)
      10         ++nc;
      11     printf("%ld\n",nc-1);
      12     return 0;
      13 }

      ++(--) is operater, be euivalent to eg(nc = nc + 1);impression add one.

    • ++(--) use a prefix effect in variable before add.in suffix it's first call variable before use progressive increase.
    • long than int more big,long support 32bit int support 16bit,but different system imparity,long in printf use %ld.
    • character version 2
      1 #include <stdio.h>
      2 int main()
      3 {
      4     double nc;
      5     for (nc = 0; getchar() != eof;++nc)
      6     ;
      7     printf("%.0f\n", nc-1);
      8     return 0;
      9 }

      double and float use %f format output.double more than float.

    • for circulation a circulation body must exsit,null statement for alone semicolon(;).
    • important is circulation in execute programs before must judge test condition whether it meets. 
  • line count
    • mind:line equal to line break number.
    • line count program
       1 #include <stdio.h>
       2 int main()
       3 {
       4     int c,nl;
       5 
       6     nl = 0;
       7     while ((c = getchar()) != eof)
       8         if (c == '\n')
       9             ++nl;
      10     printf("%d\n",nl);
      11     return 0;
      12 }

       ==:mean equal.      'a':mean character constant.corresponding ascii number.

    • C lang:character input and output (I/O)

  • count blanks,tabs,and newlines.
    • C lang:character input and output (I/O)

       

      version 1

    •  1 #include <stdio.h>
       2 int main()
       3 {
       4     int c, nb, nt, nl;
       5 
       6     nb = 0;     /* number of blanks     */
       7     nt = 0;     /* number of tabs       */
       8     nl = 0;     /* number of newlines   */
       9     while ((c = getchar()) != eof){
      10         if ( c == ' ')
      11             ++nb;
      12         if ( c == '\t')
      13             ++nt;
      14         if ( c == '\n')
      15             ++nl;
      16     }
      17     printf("blanks:%6d\ntabs:%6d\nnewlines:%6d\n", nb, nt, nl);
      18     return 0;
      19 }

      ....>>>

    • version 2
       1 #include <stdio.h>
       2 int main()
       3 {
       4     int c, nb, nt, nl;
       5 
       6     nb = 0;     /* number of blanks     */
       7     nt = 0;     /* number of tabs       */
       8     nl = 0;     /* number of newlines   */
       9     while ((c = getchar()) != eof)
      10         if ( c == ' ')
      11             ++nb;
      12         else ( c == '\t')
      13             ++nt;
      14         else ( c == '\n')
      15             ++nl;
      16 
      17     printf("blanks:%6d\ntabs:%6d\nnewlines:%6d\n", nb, nt, nl);
      18     return 0;
      19 }

      but i not  successful execute.

  • replace string of blanks with a single blank
    • version 1
       1 #include <stdio.h>
       2 #define nonblank 'a'
       3 int main()
       4 {
       5     int c, lastc;
       6 
       7     lastc = nonblank;
       8     while (( c = getchar()) != eof){
       9         if (c != ' ')
      10             putchar(c);
      11         if (c == ' ')
      12             if (lastc != ' ')
      13                 putchar(c);
      14         lastc = c;
      15     }
      16     return 0;
      17 }

      one if statement control nonblank output.tow if statement deal with blank.three blank check blank is one or more blank.last print c.

    • version 2

       1 #include<stdio.h>
       2 #define nonblank 'a'
       3 int main()
       4 {
       5     int c, lastc;
       6 
       7     lastc = nonblank;
       8     while ((c = getchar()) != eof ){
       9         if (c != ' ')
      10             putchar(c);
      11         else if (lastc != ' ')
      12             putchar(c);
      13         lastc = c;
      14     }
      15     return 0;
      16 }

      ok,success!

    • version 3
       1 #include <stdio.h>
       2 
       3 #define nonblank 'a'
       4 int main()
       5 {
       6     int c, lastc;
       7 
       8     lastc = nonblank;
       9     while ((c = getchar()) != eof){
      10         if (c != ' ' || lastc != ' ')
      11             putchar(c);
      12         lastc = c;
      13     }
      14     return 0;
      15 }

      this method use logic simbol (or) || realize.

    • C lang:character input and output (I/O)

       ok,this aim at blank deal wilth three method.

  • replace tabs and backspaces with visible characters.
    • realize
       1 #include<stdio.h>
       2 int main()
       3 {
       4     int c;
       5 
       6     while ((c = getchar())!= eof){
       7         if (c == '\t')
       8             printf("\\t");
       9         if (c == '\b')
      10             printf("\\b");
      11         if (c == '\\')
      12             printf("\\\\");
      13         if (c != '\b')
      14             if (c != '\t')
      15                 if (c != '\\')
      16                     putchar(c);
      17     }
      18     return 0;
      19 }

      C lang:character input and output (I/O)

       

       why?//??????????????????????------------------------------program bug.......i brain in the blue screen.so,go to www.baidu.com to find out.

    • truth  to version 2
       1 #include<stdio.h>
       2 int main()
       3 {
       4     int c;
       5 
       6     while ((c = getch())!= eof){              /*getchar not identify keyboard backspace.*/
       7         if (c == '\t')
       8             printf("\\t");
       9         if (c == '\b')
      10             printf("\\b");
      11         if (c == '\\')
      12             printf("\\\\");
      13         if (c != '\b')
      14             if (c != '\t')
      15                 if (c != '\\')
      16                     putchar(c);
      17     }
      18     return 0;
      19 }

      getchar not catch backspace so,will getchar replace getch. getch() can catch any print behavior.

    • C lang:character input and output (I/O)

       oh,yes!

    • it can also be used if-else. to version 3
       1 #include <stdio.h>
       2 int main()
       3 {
       4     int c;
       5 
       6     while((c = getch())!= eof)
       7         if (c == '\t')
       8             printf("\\t");
       9         else if (c == '\b')
      10             printf("\\b");
      11         else if (c == '\\')
      12             printf("\\\\");
      13         else
      14             putchar(c);
      15     return 0;
      16 }

      ok.next is a word count.

  • word count
    • count input lines,words and strings number.
       1 #include <stdio.h>
       2 #define in 1
       3 #define out 0
       4 
       5 int main()
       6 {
       7     int c, nl, nw, nc, state;
       8 
       9     state = out;
      10     nl = nw = nc = 0;
      11     while ((c = getchar())!= eof){
      12         ++nc;
      13         if (c == '\n')
      14             ++nl;
      15         if (c == ' ' || c == '\n' || c == '\t')
      16             state = out;
      17         else if (state == out){
      18             state = in;
      19             ++nw;
      20         }
      21     }
      22     printf("lines:%9d\nword:%9d\nstring:%9d\n",nl,nw,nc);
      23     return 0;
      24 }

      &&:and  ||: or , and higher priority or. expression from left to right.         a = b = c = 0   if meanwhile include value and assignment two type,order from right to left.

    • C lang:character input and output (I/O)
    • if statement
      1 if(expression)
      2     statement1       /* true */
      3 else
      4     statement2       /* false */
      5 else if (expression){
      6     statement1       /* true*/
      7     ...
      8 }

      true or false.

  • print input one word per line.
    • last practical program.very basis.very important.
       1 #include<stdio.h>
       2 
       3 #define in 1
       4 #define out 0
       5 
       6 int main()
       7 {
       8     int c, state;
       9 
      10     state = out;
      11     while ((c = getchar()) != eof){
      12         if (c == ' ' || c == '\n' || c == '\t'){
      13             if (state == in){
      14                 putchar('\n');
      15                 state = out;
      16             }
      17         } else if (state == out){
      18             state = in;
      19             putchar(c);
      20         } else
      21             putchar(c);
      22     }
      23     return 0;
      24 }

      state is a bool value.

 

 

  • C lang:character input and output (I/O)

cx_conclusion

  1. i/o model common use getchar and putchar,interactive use of putchar and printf.
  2. file copy
  3. charater count
  4. line count
  5. count blanks,tabs,and newlines.
  6. replace string of blanks with a single blank
  7. replace tabs and backspaces with visible characters.
  8. word count
  9. print input one word per line.
  10. getchar and putchar printf().and putch()
  11. != and ==\=
  12. ++ / -- 
  13. eof
  14. long and double
  15. while and if else
  16. ascii 'a'
  17. || or  ; && and