180 likes | 295 Views
Character Input and Output. C and Data Structures Baojian Hua bjhua@ustc.edu.cn. Overview. We have talked about: Basic data types and C control structures This lecture: Basic character input and output Three examples: echo input directly to output character counting line counting.
E N D
Character Input and Output C and Data Structures Baojian Hua bjhua@ustc.edu.cn
Overview • We have talked about: • Basic data types and C control structures • This lecture: • Basic character input and output • Three examples: • echo input directly to output • character counting • line counting
Char IO • Including the Standard Input/Output (stdio) library • #include <stdio.h> • Makes names of functions, variables, and macros available • Defining procedure main() • Starting point of the program, a standard boilerplate • Read a single character • Returns a single character from the text stream “standard in” (stdin) • char c = getchar(); • Write a single character • Writes a single character to “standard out” (stdout) • putchar (c);
The Code #include <stdio.h> int main(void) { int c; c = getchar(); putchar(c); return 0; }
self-increment operator Read Ten Chars #include <stdio.h> int main(void) { int c; int i; for (i=0; i<10; i++) { c = getchar(); putchar(c); } return 0; }
Infinite IO #include <stdio.h> int main(void) { int c; int i; for ( ; ; ) { c = getchar(); putchar(c); } return 0; } // or a while version #include <stdio.h> int main(void) { int c; int i; while (1) { c = getchar(); putchar(c); } return 0; }
Conditional IO #include <stdio.h> int main(void) { int c; int i; c = getchar(); while (c != ‘a’) { c = getchar(); putchar(c); } return 0; }
Character Counting #include <stdio.h> /* count characters in input */ int main() { long nc; nc = 0; while (getchar() != EOF) { ++nc; } printf("%ld\n", nc); return 0; }
Line Counting #include <stdio.h> /* count lines in input */ int main() { long numLines; numLines = 0; char c; while ((c=getchar()) != EOF) { if (c == ‘\n’) ++numLines; } printf("%ld\n", numLines); return 0; }
Arrays • Thus far, we have seen: • Characters are just small integers (0-255) • More operations • ++i, i++, ==, != • Control structures • Nested controls • Next, we consider how to count the number of characters ‘0’ to ‘9’
A First Try #include <stdio.h> int main() { long num0, num1, …, num9; num0 = num1 = … = num9 = 0; char c; while ((c=getchar()) != EOF) { if (c == ‘0’) ++num0; else if (c == ‘1’) ++num1; …; } printf("%ld\n", …); return 0; }
Using Arrays #include <stdio.h> int main() { long num[10]; char c; int i; for (i=0; i<10; i++) num[i] = 0; while ((c=getchar()) != EOF) { if ((c >= ‘0’) && (c <= ‘9’)) ++num[c-’0’]; } return 0; }
The Essence of Array • An array variable a is just a pointer pointing to the first array element a[0] • So when we pass an array to other functions, or we operate on the array variable, we are really operating on a pointer, not on array elements • More on this later
An Example #include <stdio.h> void foo(long[] a) { a[0] = 999; return; } int main() { long num[5]; num[0] = 0; foo (num); printf(“%ld\n”, num[0]); return 0; } ? ? num ? ? ?
An Example #include <stdio.h> void foo(long[] a) { a[0] = 999; return; } int main() { long num[5]; num[0] = 0; foo (num); printf(“%ld\n”, num[0]); return 0; } 0 ? num ? ? ?
An Example #include <stdio.h> void foo(long[] a) { a[0] = 999; return; } int main() { long num[5]; num[0] = 0; foo (num); printf(“%ld\n”, num[0]); return 0; } a 0 ? num ? ? ?
An Example #include <stdio.h> void foo(long[] a) { a[0] = 999; return; } int main() { long num[5]; num[0] = 0; foo (num); printf(“%ld\n”, num[0]); return 0; } a 999 ? num ? ? ?
An Example #include <stdio.h> void foo(long[] a) { a[0] = 999; return; } int main() { long num[5]; num[0] = 0; foo (num); printf(“%ld\n”, num[0]); return 0; } 999 ? num ? ? ?