darksky darksky - 9 months ago 52
C Question

fgets() not waiting for input

I wrote the following code:

int N;
scanf("%d", &N);
int i;
for (i = 0; i < N; i++) {
char line[LINE_MAX];
if (fgets(line, LINE_MAX, stdin) != NULL) {
// do stuff with line here
printf("%c - %c\n", line[0], line[1]);

I have an input file which has the number of lines it has, and then that number of lines followed which I want to process. So I read in the number of lines into
. After that, I use
to get the line to be able to process it.

does not seem to wait for a stdin the first time. I always get output of
, and then it waits for input. Meaning, the first iteration of the loop, it is not waiting for standard input at
and just prints out two empty characters separated by
as my

Why is that? How can I get
to wait for input each time? I feel like it is a threading issue.

Answer Source

As geekosaur said, you are not handling the newline left behind by scanf. You can modify your scanf format string to take it into account:

scanf("%d *[^\n]", &N);

*[^\n] says to ignore everything after your integer input that isn't a newline, but don't do anything with the newline (skip it).

Test program output:

emulawsk@cs:~/testing$ ./test2
1 - 3
2 - 6
5 - 9
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download