c - 我的 getLine 实现仅在第一次有效

标签 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;

}

有人知道可能出了什么问题吗?

最佳答案

getLine 函数工作正常,但打印循环是垃圾输出的原因。

您可以使用以下命令打印输出

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);

关于c - 我的 getLine 实现仅在第一次有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13337292/

相关文章:

c - 循环中 printf 的 Getline 行为

c++ - 验证输入和 getline() 函数

c++ - 为什么第二个字符丢失了第二个变量

c++ - cin.getline 将字符串的开头设置为 '\0'

c - 生成大小超过 8 MB 的大型十六进制数数组

c++ - libpng png_set_add_alpha | png_set_filler 错误 : sequential row overflow

令人困惑的格式错误 C 程序 fscanf

c - 如何使用动态数组中的值

c - 如何在 C 中进行显式失败

c++ - 编译器无法识别 Getline