Why scanf doesn\'t work when I type \"Enter\" in the code below?
#include
#include
#include
int main(int a
The "%s"
in scanf("%s",...
skips over leading whitespace (including "Enter" or \n
) and so patiently waits for some non-whitespace text.
Best to take in a \n
, use fgets()
as suggested by @maxihatop
fgets(msg, 100, stdin);
If you need to use scanf()
int result = scanf("%99[^\n]%*c", msg);
if (result != 1) handle_IOError_or_EOF();
This will scan in 1 to 99 non-\n
chars and then append a \0
. It will then continue to scan 1 more char
(presumably the \n
) but not save it due to the *
. If the first character is a '\n'
, msg
is not changed and the '\n'
remains in stdin
.
Edit (2016): To cope with lines that begin with '\n'
, separate the scan that looks for the trailing '\n'
.
msg[0] = '\0';
int result = scanf("%99[^\n]", msg);
scanf("%*1[\n]");
if (result == EOF) handle_IOError_or_EOF();