我的getLine实现仅在第一次工作

时间:2012-11-12 01:26:30

标签: c getline

我有一个包含三行文字的.txt文件。

12345
67
890

我正在尝试使用我的getLine函数将每一行读入一个字符数组,然后打印出数组:

int main()
{
    char line_1[100];
    char line_2[100];
    char line_3[100];

    getLine(line_1,50);
    getLine(line_2,50);
    getLine(line_3,50);

    int c;
    int i=0;

    while((c=line_1[i++]) != EOF){
        putchar(c);
    }

    i=0;
    while((c=line_2[i++]) != EOF){
        putchar(c);
    }
    i=0;
    while((c=line_3[i++]) != EOF){
        putchar(c);
    }   
}

然而,这输出

12345
íOÌ@C@À'¡67
N¿'¡890

每次都有胡言乱语。我的getLine实现如下

int getLine(char line[], int size)//get a line of length size from stdin
{
    int i=0;
    int c=0;

    while(((c=getchar()) !=EOF) && (c!='\n') && i<size)
    {
        line[i++]=c;
    }

    if(c=='\n') line[i++] =c;
    line[i]='\0';
    return i;

}

有没有人有任何可能出错的想法?​​

1 个答案:

答案 0 :(得分:4)

getLine函数正常工作,但print-loops是垃圾输出的原因。

使用

打印输出
while((c=line_1[i++]) != EOF){
    putchar(c);
}

EOF不是字符,当然也不是字符串终止符。

您应该将循环更改为

while((c=line_1[i++]) != '\0'){
    putchar(c);
}

printf("%s", line_1);

fputs(line_1, stdout);