The Enter key (also called newline, or return) matters. When you type something using the keyboard, you have to press Enter at the end.
We tend to ignore Enter, because it’s not what we’re interested in. However, it’s still there. We have to deal with it.
When reading characters, make sure that you’ve accounted for Enter:
char cmd; // single-character command char enter; // dump the enter key here double value; printf("Enter a command: "); scanf("%c%c", &cmd, &enter); printf("Now a number: "); scanf("%lf%c", &value, &enter);
This reads the command into
cmd, and reads Enter into
the variable called
enter, where it is ignored.
If all that your program reads are numbers, then you don’t have to
worry about Enter. That’s because
scanf is smart when
reading numbers, and skips over leading whitespace (spaces, tabs,
and the Enter key).
However, if your program is reading both characters and numbers, then you have to deal with Enter.
Here’s how to avoid having an
char cmd; // single-character command printf("Enter a command: "); scanf("%c%*c", &cmd);
%*cmeans “Don’t save that character that we read—throw it away.”
entervariable, because we’re not saving the Enter key anywhere.
scanfformat string means “skip whitespace”.
%s, is redundant, but ok.
%sautomatically skip leading whitespace.
Here’s another technique:
char cmd; printf("Enter a command: "); scanf(" %c", &cmd);
Consider this poor code:
char cmd; printf("Enter a command: "); scanf(" %c ", &cmd); // BAD CODE
scanfsupposed to know how much whitespace you’re going to type?