Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的用户输入变量值_C_Mpi - Fatal编程技术网

C语言中的用户输入变量值

C语言中的用户输入变量值,c,mpi,C,Mpi,我是C语言的初学者(对C++几乎没有经验),我对用户输入变量值有问题。我用C编写了MPI\u Scatter和MPI\u Gather程序,计算每个节点上输入的整数总数 问题是:如果我将变量输入(见下面的代码)定义为input=5它将计算所有4节点(210)的总和。如果我将输入设置为scanf,结果将仅为15。这个变量似乎改变了它的值。你能帮我吗? 代码: #包括“mpi.h” #包括 #包括 #定义主机0 int main(int argc,字符**argv){ 国际标识,nproc; MPI

我是C语言的初学者(对C++几乎没有经验),我对用户输入变量值有问题。我用C编写了
MPI\u Scatter
MPI\u Gather
程序,计算每个节点上输入的整数总数

问题是:如果我将变量输入(见下面的代码)定义为
input=5
它将计算所有
4
节点(
210
)的总和。如果我将输入设置为
scanf
,结果将仅为
15
。这个变量似乎改变了它的值。你能帮我吗? 代码:

#包括“mpi.h”
#包括
#包括
#定义主机0
int main(int argc,字符**argv){
国际标识,nproc;
MPI_Init(&argc,&argv);
MPI通信大小(MPI通信世界和nproc);
MPI通信等级(MPI通信等级和id);
MPI_状态;

int input=0;//您的查询类似于下面的堆栈溢出问题: 拜访

选项如下:请从文件中读取输入

以下是要从文件中读取的示例代码:

  #include "mpi.h"
  #include <stdio.h>
  #include <stdlib.h>

  int main(int argc, char *argv[])
  {
    int myid, nprocs;
    int *array;
    int size, i;
    FILE *fp;

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &myid);
    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);

    if(myid ==0)
    {
     fp = fopen("test", "r");
     fscanf(fp, "%d", &size);
    }

   /* MPI_Bcast(void *buffer,
           int count,
           MPI_Datatype datatype,
           int root,
           MPI_Comm comm) */
   MPI_Bcast(&size,1, MPI_INT, 0, MPI_COMM_WORLD);
   array = (int *) malloc(size* sizeof(int));

   if(myid ==0)
   {
    for(i = 0; i < size; i++)
    {
     fscanf(fp, "%d", &array[i]);
    }
   }
    MPI_Bcast(array, size, MPI_INT, 0, MPI_COMM_WORLD);

    MPI_Finalize();
  }
#包括“mpi.h”
#包括
#包括
int main(int argc,char*argv[])
{
int myid,NPROC;
int*数组;
int大小,i;
文件*fp;
MPI_Init(&argc,&argv);
MPI通信等级(MPI通信世界和myid);
MPI通信大小(MPI通信世界和NPROC);
如果(myid==0)
{
fp=fopen(“测试”、“r”);
fscanf(fp、%d、&size);
}
/*MPI_Bcast(无效*缓冲区,
整数计数,
MPI_数据类型数据类型,
int根,
MPI_通信(通信)*/
MPI_Bcast(大小和大小,1,MPI_INT,0,MPI_COMM_WORLD);
数组=(int*)malloc(size*sizeof(int));
如果(myid==0)
{
对于(i=0;i
以下是链接中的一些示例: 拜访

如果它真的需要用户输入:我们的选项是

1) 从命令行参数或文件中读取(编写代码以输入到该文件-尽管这是一种冗长的方法)

2) 在MPI_Init之后,STDIN将无法按预期工作。请尝试将scanf语句放在MPI_Init之前

修改代码:请尝试以下操作:

    int id, nproc;
    MPI_Status status;
    int input=0; // <- problematic variable
    int nodeValue=0;
    int size;
    int *array;
    if(id == MASTER){
     printf("How many elements per node? ");
     scanf("%d", &input);
     nodeValue = input;
    }
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
    MPI_Comm_rank(MPI_COMM_WOLRD, &id);
int-id,nproc;
MPI_状态;

int input=0;//什么是
scanf
的返回值?从标准输入中读取的线程有很多吗?scanf的返回值是什么意思?@SwanandNo,我只有输入值…@k_kaz@ZanPokerznikScanf返回读取的项目数。如果操作中出现错误,Scanf将返回0,
input
将保持为0。Yo您可以尝试使用其他值初始化
输入
,查看输出是否更改。如果
scanf
返回1(或>0),我们将知道程序正确地接受了输入。对不起,用户输入必须在主控部分中。-谢谢,@Habi Sherriff,但输入必须由用户完成。无论如何,感谢您的帮助,我已经检查了您的链接。这是不允许的,“在初始化MPICH之前尝试使用MPI例程”。@Habi Sherriff
    int id, nproc;
    MPI_Status status;
    int input=0; // <- problematic variable
    int nodeValue=0;
    int size;
    int *array;
    if(id == MASTER){
     printf("How many elements per node? ");
     scanf("%d", &input);
     nodeValue = input;
    }
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
    MPI_Comm_rank(MPI_COMM_WOLRD, &id);