MPI ignores cin
MPI ignores cin
我已经编写以下代码。它打算读取从控制台(到data
变量)的数字,并将其发送到所有其他过程。但是 cin >> data
刚被忽略。
#include <mpi.h>
#include <iostream>
#include <stdio.h>
using namespace std;
int main(int argc, char* argv[]) {
int rank, n;
int i;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &n);
int data = 322; // magic number 322 just for initialisation
if (rank == 0)
{
cout << "From which process do you want to transfer data?" << endl;
cin >> i;
MPI_Send(&i, 1, MPI_INT, rank+1, 0, MPI_COMM_WORLD);
}
else
{
MPI_Recv(&i, 1, MPI_INT, rank-1, 0, MPI_COMM_WORLD, &status);
if (rank < n - 1)
MPI_Send(&i, 1, MPI_INT, rank+1, 0, MPI_COMM_WORLD);
if(rank == i) {
cout << "Process #"<< rank <<" waiting data to send. Please enter." << endl;
cin >> data; //doesn't work
for(int j = 0; j < n; j++)
if(j != i)
MPI_Send(&data, 1, MPI_INT, j, 7, MPI_COMM_WORLD);
}
else {
int pata;
MPI_Recv(&pata, 1, MPI_INT, i, 7, MPI_COMM_WORLD, &status);
cout << "Process "<< rank <<" received data (" << pata << ") from process #" << i << endl;
}
}
MPI_Finalize( );
}
控制台看起来像:
From which process do you want to transfer data?
2
Process #2 waiting data to send. Please enter.
Process 1 received data (322) from process #2
Process 3 received data (322) from process #2
我已经尝试了cin.clear()
和cin.ignore()
。
stdin
通常从 mpirun
/ mpiexec
重定向到等级 0
。
可能有选项(取决于您正在运行的实现),以重定向到您选择的等级和/或重定向到所有等级。
底线,我认为您正在尝试的是可以实现的。
相关文章:
- C++中的cin.ignore()函数不适用于整个流
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- Problems with std::cin.fail()
- 由cin中的字符串中未捕获空白引起的分割错误
- 在C++中使用Cin,我如何在1行中输入
- 将 cin 限制为只有一个
- cin >> int 给定一个字符串将 int 赋值为 0
- istream std::cin如何修改自定义istream缓冲区
- C++ 将 CIN 值存储到任何类型的数组中
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- cin 的十进制输入验证?
- Turbo C++ cin() 不能与 gets() 一起使用
- 使用 cin 时接受小数点后的 2 位数字
- 在 std::getline 和 std::cin 期间卡在循环中
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 为什么我的两个 cin 语句没有在程序结束时运行?
- C++ cin.ignore() 跳过循环
- CIN是逻辑1还是0?
- 如何运行多行 cin?
- MPI ignores cin