0

Linux のパイプに問題があります。パイピング後にスペース文字が失われたようです。次のC++コードを実行する

#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

int main(){
    char s[] = "ab cd", c;
    int n = strlen(s);
    for(int i = 0; i<n && (cin >> c); i++)
        if(s[i] != c){
            printf("wrong at %d : '%c' != '%c' \n", i, s[i], c);
            break;
        }
    return 0;
}

から

echo "ab cd" | ./checker

シェルコマンドが与える

wrong at 2 : ' ' != 'c'

それは正常な動作ですか?パイプで文字が失われないようにするには?

4

2 に答える 2

5

問題はパイプではなく、cin >> c空白をスキップすることです。

あなたがすればそれはうまくいくでしょうcin >> noskipws >> c

またはこのようなもの:

std::string q;
getline(cin, q);

for(i = 0; i < n && i < q.size(); i++)
{
  if (q[i] != s[i]) 
    ...
}
于 2013-08-23T22:37:34.403 に答える
1

これは使用時のデフォルトの動作でcinあり、パイプとは関係ありません。

空白を無視しないようにストリームに指示したい場合があります。

std::cin >> std::noskipws;

次に、すでに行っているように続行します。

于 2013-08-23T22:38:23.280 に答える