我有这两个函数,ReadData用于输入三个数字的用户输入,另一个函数ComputeSum用于获取用户输入的值并将它们加在一起。我试图将ComputeSum函数的结果分配给 total 变量,但无法打印正确的总数。有人可以解释导致这种情况发生的原因吗?
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
void ReadData(int *x,int *y,int *z);
int ComputeSum(int x,int y,int z);
int main()
{
int x, y, z;
int total;
ReadData(&x, &y, &z);
printf("\n");
total = ComputeSum(x,y,z);
printf("The total is: %d", total);
printf("\n\n");
system("PAUSE");
return 0;
}
void ReadData(int *x,int *y,int *z)
{
printf("Enter three numbers : ");
scanf("%d %d %d", &x, &y, &z );
printf("\n");
ComputeSum(x,y,z);
return ;
}
int ComputeSum(int x,int y,int z)
{
int Sum = x+y+z;
return Sum;
}
___________________________________________________________________
**Sample Output**
Enter three numbers : 5 5 5
The total is: 8869621
Press any key to continue . . .
答案 0 :(得分:1)
ReadData()
中的这一行不正确
scanf("%d %d %d", &x, &y, &z );
应该是
scanf("%d %d %d", x, y, z );
因为这三个参数已经是指针。同一函数中的以下行
ComputeSum(x,y,z);
也不正确,应该是
ComputeSum(*x, *y, *z);
但由于你没有使用结果,所以甚至没有必要,而且无论如何都会在main
中调用它。
请启用编译器警告并注意它们,这两个故障都会产生警告。
答案 1 :(得分:1)
在函数void ReadData(int *x,int *y,int *z);
scanf("%d %d %d", &x, &y, &z );
x
,y
和z
已经是指针,所以你不需要传递他们的地址,只需传递指针 -
scanf("%d %d %d", x, y, z );
我不明白为什么你在ComputeSum()
中调用ReadData()
,因为你已经在main()
中调用了void ReadData(int *x,int *y,int *z)
{
//your code
ComputeSum(x,y,z); // Why ?? No need of it
return ;
}
。不需要这样做。
{{1}}
答案 2 :(得分:0)
这是您的解决方案,
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
void ReadData(int *x,int *y,int *z);
int ComputeSum(int x,int y,int z);
int main()
{
int x, y, z;
int total;
ReadData(&x, &y, &z);
printf("\n");
printf("\n\n");
system("PAUSE");
return 0;
}
void ReadData(int *x,int *y,int *z)
{
printf("Enter three numbers : ");
scanf("%d %d %d", x, y, z );
printf("\n");
int total = ComputeSum(*x,*y,*z);
printf("The total is: %d", total);
return ;
}
int ComputeSum(int x,int y,int z)
{
int Sum = x+y+z;
return Sum;
}
仅从ReadData调用ComputeSum函数,
int total = ComputeSum(*x,*y,*z);