我正在为一个读取空格分隔文件的 c++ 数据结构类编写一个程序,我编写了一个小函数,以便我可以通过管道输入不同的文件并使用它们,但我也想使用 cin 获取用户输入和似乎缓冲区只是在循环。我在这里有点超出我的深度,但这是我的输入功能。我正在通过 $ cat filename | 运行程序 ./编译执行。我希望有人可能知道为什么在其他地方使用 cin 不等待用户输入并可能帮助解决问题?
void catchPipe(int dataArray[][9]);
int main(){
int inArray[9][9];
int column;
catchPipe(inArray);
cout << "Which column would you like to check?";
cin >> column; // This input is skipped totally.
functionChecksIfInCol(column); //Function called with garbage value
cout << "end program" << endl;
return 0;
}
void catchPipe(int dataArray[][9]){
int i;
int n=0;
int pos=0;
string mystring;
while(cin){
getline(cin, mystring);
if( n < 9 ){
for(i = 0; i < mystring.length(); i++){
if( (int)mystring[i] != 32 ){
dataArray[n][pos] = mystring[i] - '0';
pos++;
}
}pos =0;
++n;
}
}
}// end catchPipe()
//Sample File input:
0 8 0 1 7 0 0 0 3
0 2 0 0 0 0 0 0 9
0 9 0 0 3 0 5 4 8
0 0 4 0 9 0 0 0 0
0 0 0 7 0 3 0 0 0
0 0 0 0 1 0 4 0 0
6 1 9 0 8 0 0 5 0
7 0 0 0 0 0 0 8 0
2 0 0 0 6 4 0 1 0
谢谢!
该程序填写了我的 inArray,但它跳过了对 cin 的下一次调用。我假设这是因为标准输入已从键盘重定向到来自 Linux 的管道?也许我可以声明另一个 istream 对象并将其定向到键盘或其他东西?我不知道在这里做什么