The input is only sent to the program after you typed a newline, but
scanf("%s", command );
leaves the newline in the input buffer, since the %s
(1) format stops when the first whitespace character is encountered after some non-whitespace, getchar()
then returns that newline immediately and doesn't need to wait for further input.
Your workaround works because it clears the newline from the input buffer before calling getchar()
once more.
To emulate the behaviour, clear the input buffer before printing the message,
scanf("%s", command);
int c;
do {
c = getchar();
}while(c != '
' && c != EOF);
if (c == EOF) {
// input stream ended, do something about it, exit perhaps
} else {
printf("Type Enter to continue
");
getchar();
}
(1) Note that using %s
in scanf
is very unsafe, you should restrict the input to what your buffer can hold with a field-width, scanf("%99s", command)
will read at most 99 (sizeof(command) - 1)
) characters into command
, leaving space for the 0-terminator.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…