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

shell 命令给出

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 回答