0

たとえば、ファイルがあります

M
4
2
//comments
.#..

stdin を介してプログラムに渡されます。fstream は使用できません。iostream だけです。

文字ごとにすべてを読みたい場合はどうすればよいですか?

char first_letter, first_num, second_num;
cin >> first_letter;
cin >> first_num;
cin >> second_num;

それとも、行末が cin を台無しにするでしょうか? のように、cin は first_letter の M を読み取った後、最後の行に移動する必要があることを知っていますか?

第二に、コメント行を読みたくありません。私の計画では、/ が表示されたら、getline を使用してその行を「破棄」し、. # . . それらを私の配列に保存します。それはそれを行うための最良の方法でしょうか?

4

1 に答える 1

1

まず、ストリームはデフォルトで空白 (スペース、タブ、改行) をスキップするので、その部分は簡単です。

さて、コメント行に関しては、これはもう少し複雑です。std::getline() を使用して 1 行を読み取ることができます。これにより、行が文字列に格納され、末尾の改行が破棄されます。ただし、たとえば上記のコードの最初の文字を読み取ると、改行がストリームに残るため、getline() は空の文字列を読み取ります。つまり、行ベースの入力とトークン ベースの入力を混在させないでください。

実際には、行を読み取り、それを手動で解析するか、そのためのストリームを作成します。

while(getline(in, line)) {
    if(line.empty()) continue; // empty line
    if(line[0] == '#') continue; // comment line
    // parse line
    std::stringstream s(line);
    char c;
    s >> c;
} 
于 2013-01-27T16:55:07.280 に答える