将代码划分为C中的函数

时间:2016-05-06 13:47:25

标签: c function memory

在我不使用它之后,我回到了C.我刚刚练习并遇到了这个问题。我想:

  1. 从scanf()
  2. 中取2个变量
  3. 将两个输入相乘
  4. 然后输出问题
  5. 我试图将不同的部分分成功能,但程序给出了疯狂的高数字(认为它们是内存地址)。这可能是由于我缺乏误解。

    #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;
    }
    

4 个答案:

答案 0 :(得分:3)

x, y = input();没有做你期望的事。您无法从函数返回两个值。你应该阅读comma operator

我建议将xy的地址传递给函数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;
}