1

こんにちは、なぜこの 2 つのプログラムが違うのか説明してくれる人がいますか?

int main (){
    string line;
    while (getline(cin,line)){
        cout << line;
    }
}

int main (){
    string line;
    while (getline(cin,line)){
        cout << line << endl;
    }
}

最初のプログラムは何らかの理由で最後の行のみを印刷するのに対し、2 番目のプログラムはすべてを印刷するようです。IOリダイレクトを使用してファイルから行を取得する割り当てに取り組んでいますが、行を印刷したい場合、すべての行を取得するために改行文字を印刷する必要があります。

4

1 に答える 1

5

getline入力の最後の改行を破棄します。ただし、Windows では、改行区切り文字は実際には です\r\n。つまり、キャリッジ リターンの後に改行が続きます。したがって、getline改行で終わる文字列を格納することになります。

改行で終わる行を印刷すると、コンソールはテキストを印刷し、カーソルを行の先頭に戻します (それが改行の機能であるため)。通常、改行はカーソルを次の行にプッシュしますが、テキストには改行が含まれていないため、現在の行の先頭から次の行が印刷され、現在の行が上書きされます。そのため、最後の行しか表示されません。

したがって、行を印刷したい場合はendlgetline破棄するを出力する必要があります。

于 2012-10-13T14:57:02.337 に答える