Lets say I have the below C code:
int getLine (char line[])
{
int c, i=0;
while( (c=getchar()) != EOF )
line[i++]=c;
line[i++] = c;
return i;
}
>> Enter: 007
>> ^Z
>> Output:
If we closely observe the way I give output above, I am pressing Enter
before stimulating EOF. This means, the length of string is 4 not 3 (excluding EOF).
When I am doing my exercises, I am really facing some trouble with that extra \n.
How do I stimulate EOF without newline? Is it possible at all?
>> Enter: 007^Z
>> ^Z
>> Output: length=6
Converting my comment into an answer:
On which platform? On Unix and derivatives, you would type the EOF 'character' twice — usually control-D rather than control-Z, though. That may also work on Windows; I don't know, but it is worth a try.
(A response comment affirms that the platform is Windows.)
On Unix, control-D makes the data on the line available to the program. The first control-D gives it what you've typed already; the second gives it zero bytes to read, which is the indication of EOF.
Then avoid storing the newline, in the loop. It's not as if you're being forced to store all characters regardless of value. :)
Also, you're not terminating the string correctly. This:
line[i++] = c;
should be:
line[i] = '\0';
And of course, it's sensitive to buffer overflow.
In general, you'd be better of using fgets()
.
EDIT: I might be missing the point, but it seems to be that the entire focus on EOF
is ... misguided, if all you want to do is read a line. Lines are not generally terminated with EOF
, but with \n
. So the function should probably just store characters until either EOF
or \n
is encountered.
来源:https://stackoverflow.com/questions/14199485/how-to-stimulate-eof-without-preceding-newline-in-c