【问题标题】:My getLine implementation only works the first time我的 getLine 实现只在第一次工作
【发布时间】:2012-10-31 11:56:37
【问题描述】:

我有一个包含三行文本的 .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;

}

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

【问题讨论】:

  • 你需要用 \0 终止你的字符串
  • 您在 getLine 中用 '\0' 终止字符串,但在 main() 中检查 EOF。在 main 中,您应该检查实际的终止字符 ('\0'),而不是 EOF 字符。检查EOF没有意义.. :)

标签: c getline


【解决方案1】:

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

【讨论】:

  • 或:fputs(line_1, stdout);
  • 添加fputs作为替代
猜你喜欢
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多