*Note: I'm using windows, so EOF is ctrl + Z for me.
For a while I've noticed an EOF input seems to behave differently in isolation than it does when accompanied by other input. For example, ^Z
(the EOF command for windows in command prompt) and a^Z
seem to cause different behavior in the following code:
#include <stdio.h>
#define MAX 1000
int getline(char s[]);
main() {
int line;
char arr[MAX];
while( (line = getline(arr)) != EOF)
printf("%s",arr);
system("Pause");
return 0;
}
int getline(char s[])
{
int c, i = 0;
while ((c = getchar()) != EOF && c != '\n') {
s[i++] = c;
}
if (c == '\n') {
s[i++] = c;
}
else
return EOF;
s[i] = '\0';
return 1;
}
If I input ^Z
+ enter in the command prompt, the program predictably jumps to system("Pause");
However, if I input abc^Z
+ enter, nothing happens, as though EOF was ignored and a '\n'
command was never received. If, at this point, I press enter again, it shows the following:
I've been tinkering with and debugging this code and small variations of it for over an hour now and can't seem to find anything wrong with it. In theory, if I input abc^Z
+ enter, I expect the input to be interpreted as abcEOF\n
, which would give:
s[0] = 'a'
s[1] = 'b'
s[2] = 'c'
i = 3 when loop breaks from c = EOF
if (c == '\n') skipped since c = EOF
leads to else -> return EOF
in main(), line = EOF since that is what the function getline returned
while loop breaks because of above
system("Pause"); follows
Is there something wrong with my code that I'm overlooking or is there some quirk to EOF or command prompt that I should be aware of? I'm almost certain this isn't the only instance where mixing ^Z
with other values caused unintended behavior.