开发者

Why is the End-of-File character not being interpreted correctly?

开发者 https://www.devze.com 2023-02-25 00:22 出处:网络
#include <stdio.h> #define MAXLENGTH 77 int getline(char[], int); main() { char in_line[MAXLENGTH];
#include <stdio.h>

#define MAXLENGTH 77

int getline(char[], int);

main() {
    char in_line[MAXLENGTH];
    int count, in_line_length;

    in_line_length = 0;

    for (count = 0; count < MAXLENGTH; ++count)
        in_line[count] = 0;
    in_line_length = getline(in_line, MAXLENGTH);
    printf("%s", in_line);
}

int getline(char line[], int max_length) {
    int count, character;

    character = 0;

    for (count = 0; count < (max_length -2) && (character = getchar()) != EOF && character != '\n'; count++) {
        line[count] = character;
    }
    if (character = '\n') 开发者_开发知识库{
        line[count++] = '\n';
    }
    line[count] = '\0';
    return count;
}

I'm having a peculiar issue with the above code. As a little background, I'm compiling the above C code with the Tiny C Compiler (TCC) and running the executable in a Windows XP command prompt (cmd.exe).

The problem that appears to be occuring has to do with the EOF character. When running, if I issue the EOF character (CTRL+Z) and then hit return, the loop seems to exit correctly, but then character is populated with a newline character (\n).

So, something like this (as input):

test^Ztesttwo

Would output:

test\n

Due to the fact that the if statement following the for loop is always executed. What I'm wondering, is why the loop successfully exits upon recognition of the EOF character if it continues to grab another character from the stream?


Your problem is this line:

if (character = '\n') {

it is an assigment instead of a test operator:

if (character == '\n') {

You can prevent erros like this by putting the constant left, that way you will get a compiler error if you make a mistake.

if ('\n' = character) {
//       ^ wont compile
0

精彩评论

暂无评论...
验证码 换一张
取 消