我在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;
}
Run Code Online (Sandbox Code Playgroud)
从
echo "ab cd" | ./checker
Run Code Online (Sandbox Code Playgroud)
shell命令给出
wrong at 2 : ' ' != 'c'
Run Code Online (Sandbox Code Playgroud)
这是正常的行为吗?如何避免丢失管道中的字符?
问题不在于管道,问题是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])
...
}
Run Code Online (Sandbox Code Playgroud)