/* * SCANF -- shows how to read using a format * * Usage: scanf (or ./scanf) * * Inputs: You are prompted for these * Outputs: various formatted values * Exit Code: 0 because all goes well * * IMPORTANT NOTE: * When you compile this with gcc and -Wall, you get * warnings about bad printfs; those are there for * demonstration * * written for ECS 36A, Fall 2019 * modified for ECS 36A, Spring 2025 to fix incompatibilities with earlier version * * Matt Bishop, Oct. 11, 2019 * original program written * Matt Bishop, Apr. 6m,2025 * modified for C11 to fix incompatibilities with earlier version of C */ #include <stdio.h> int main(void) { int i, j; /* variables for input */ int r; /* return value of scanf */ int k; /* used to break out of a while loop */ int c; /* used to read a line */ char x; /* variable for input */ /* * read in an integer */ printf("enter an integer: "); if ((r = scanf("%d", &i)) == 1) printf("You typed '%d'\n", i); else if (r == EOF){ printf("You typed EOF to end input\n"); return(0); } else printf("You didn't type an integer\n"); /* * now read 2 integers */ printf("enter 2 integers: "); if ((r = scanf("%d %d", &i, &j)) == 2) printf("You typed '%d %d'\n", i, j); else if (r == 1) printf("You typed '%d' and a non-integer\n", i); else if (r == EOF){ printf("You typed EOF to end input\n"); return(0); } else printf("You didn't type an integer\n"); /* * here's a good way to mess up */ printf("enter a string that doesn't begin with a number: "); k = 100; while (k > 0 && scanf("%d %d", &i, &j) != 2){ if (k % 10 == 0) printf("Going around for the %d-th time\n", k); k = k - 1; } printf("What happened is it tries to read another. But it sees a non-digit\n"); printf("Bnd so does not read it, and returns -1. But it then goes back (the\n"); printf("while loop) and repeats this. Were it not for the k this would go\n"); printf("on indefinitely. So *always* check that the return value of scanf is\n"); printf("EOF or what you expect.\n"); /* * Here's an idiom to clean out the unread part of the line */ while ((c = getchar()) != '\n' && c != EOF) printf("read char '%c'\n", c); /* * now we can read an integer */ printf("enter an integer: "); if ((r = scanf("%d", &i)) == 1) printf("You typed '%d'\n", i); else if (r == EOF){ printf("You typed EOF to end input\n"); return(0); } /* * now we read a character */ printf("Now we read the character following the integer you typed above\n"); printf("If we didn't type anything else, just hit return or enter, it\n"); printf("that's what is read and printed; if it's any other character,\n"); printf("the rest of the line is discarded; if you typed EOF, then every\n"); printf("future scanf in the program returns EOF.\n"); if ((r = scanf("%c", &x)) == 1) printf("You typed '%c'\n", x); else if (r == EOF){ printf("You typed EOF to end input\n"); return(0); } else printf("You didn't type an integer\n"); return(0); }
|
ECS 36A, Programming & Problem Solving Version of April 2, 2024 at 12:13PM
|
You can get the raw source code here. |