C语言中的用户输入变量值
我是C语言的初学者(对C++几乎没有经验),我对用户输入变量值有问题。我用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
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);