C lang:character input and output (I/O)
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
- in other system can by definition other value.
- file copy version 1
- 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.
- character count version 1
- 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.
- count blanks,tabs,and newlines.
-
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.
-
ok,this aim at blank deal wilth three method.
-
version 1
- 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 }
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.
-
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.
- realize
- 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.
- 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.
- count input lines,words and strings number.
- 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.
- last practical program.very basis.very important.
cx_conclusion
- i/o model common use getchar and putchar,interactive use of putchar and printf.
- file copy
- charater count
- line count
- count blanks,tabs,and newlines.
- replace string of blanks with a single blank
- replace tabs and backspaces with visible characters.
- word count
- print input one word per line.
- getchar and putchar printf().and putch()
- != and ==\=
- ++ / --
- eof
- long and double
- while and if else
- ascii 'a'
- || or ; && and