3

3 行のテキストを含む .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;

}

誰が何がうまくいかないのか考えていますか?

4

1 に答える 1

4

関数は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);
于 2012-11-12T08:06:20.707 に答える