在我不使用它之后,我回到了C.我刚刚练习并遇到了这个问题。我想:
我试图将不同的部分分成功能,但程序给出了疯狂的高数字(认为它们是内存地址)。这可能是由于我缺乏误解。
#include <stdio.h>
int input();
int mult ( int x, int y );
int main()
{
int x;
int y;
x, y = input();
printf( "In Main: x, y: %d, %d\n", (x, y) );
z = mult(x,y);
printf( "The product of your two numbers is %d\n", z );
getchar();
getchar();
}
int input()
{
int i_x;
int i_y;
printf( "Please input two numbers to be multiplied: " );
scanf( "%d", &i_x );
scanf( "%d", &i_y );
printf( "In Input: x, y: %d, %d\n", i_x, i_y );
return i_x, i_y;
}
int mult (int x, int y)
{
int a;
int b;
int c;
a = x;
b = y;
printf( "In Multi: x, y: %d, %d\n", a, b );
c = a*b;
return c;
}
答案 0 :(得分:3)
x, y = input();
没有做你期望的事。您无法从函数返回两个值。你应该阅读comma operator。
我建议将x
和y
的地址传递给函数input
。首先改变原型
void input(int *, int *);
然后将其称为
input(&x, &y);
并更改定义
void input(int *i_x, int *i_y)
{
printf( "Please input two numbers to be multiplied: " );
scanf( "%d", i_x );
scanf( "%d", i_y );
printf( "In Input: x, y: %d, %d\n", *i_x, *i_y );
}
答案 1 :(得分:0)
main
应返回一个值,因为它定义为int
return i_x, i_y;
仅根据 [comma operator]的定义返回i_y
。根据相同的定义,x, y = input();
仅指定y
。
答案 2 :(得分:0)
正如@haccks指出的那样,分配x&amp;通过调用input()将无法正常工作。 变量x将具有单位化的垃圾值,并将相应地影响输出。 要验证,如果将x初始化为1,则输出应与第二个输入(i_y)相同。
答案 3 :(得分:0)
就像@haccks所说,你不能从函数中返回两个值。而是将input()的参数定义为指针变量并生成input()并返回void。
所以你的最终代码看起来像这样:
#include <stdio.h>
void input(int *i_x, int *i_y);
int mult ( int x, int y );
int main()
{
int x;
int y;
int z;
input (&x, &y);
printf( "In Main: x, y: %d, %d\n", x, y);
z = mult(x,y);
printf( "The product of your two numbers is %d\n", z );
getchar();
getchar();
}
void input(int *i_x, int *i_y)
{
printf( "Please input two numbers to be multiplied: " );
scanf( "%d", i_x );
scanf( "%d", i_y );
printf( "In Input: x, y: %d, %d\n", *i_x, *i_y );
}
int mult (int x, int y)
{
int a;
int b;
int c;
a = x;
b = y;
printf( "In Multi: x, y: %d, %d\n", a, b );
c = a*b;
return c;
}