如何在C中打印子程序的输出?

时间:2014-08-12 10:22:03

标签: c subroutine

我正在使用一个非常简单的子程序代码,但它没有打印正确的值。 请帮帮我。我的代码是:

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

main(){
  int i, a, b=0.0, c=0.0;
  void sum(int a , int b);
  for ( i = 0; i < 2; i++ ) {   
    sum (a, b); c = c+b;
  }
  printf("%d\n", c);
}
void sum(int a , int b){
  int i;
  for ( i = 0; i <6; i++ )  {a = i*i;b = b+a;}
}

5 个答案:

答案 0 :(得分:2)

sum(int,int)的效果对调用者不可见,因为ab是按值传递的。您需要使用指针来实现所需的结果:

void sum(int *a , int *b){
    for (int i = 0; i <6; i++ ) {
        *a = i*i;
        *b += *a;
    }
}

更改前向声明以使用指针,并调用sum (&a, &b)来传递指针。

答案 1 :(得分:1)

sum(a, b)NOP,您需要传递一个指针:

#include <stdio.h>

void sum(int *a, int *b)
{
    int i;

    for (i = 0; i < 6; i++) {
        *a = i * i;
        *b = *b + *a;
    }
}

int main(void)
{
    int i, a, b = 0.0, c = 0.0;

    for (i = 0; i < 2; i++) {   
        sum(&a, &b);
        c = c + b;
    }
    printf("%d\n", c);
    return 0;
}

答案 2 :(得分:1)

您正在按值调用该函数。您应该通过使用指针或引用的引用来调用该函数。

答案 3 :(得分:0)

要添加子程序,您需要使用Call by reference Method。然后只将值正确分配给变量。但是你正在使用Call by Value Method。所以它只会将值的副本传递给子程序函数。子程序中的哪些更改不会影响主函数。请尝试以下更改

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

main(){
int i, a, b=0, c=0; // fix 1
void sum(int *a , int *b); // fix 2
  for ( i = 0; i < 2; i++ ) {
  sum (&a, &b); c = c+b; // fix 3
  }
  printf("%d\n", c);
}
void sum(int *a , int *b){ // fix 4
  int i;
  for ( i = 0; i <6; i++ )  {*a = i*i;*b = *b+*a;}
}

答案 4 :(得分:0)

#include<stdio.h>


void sum(int *a , int *b);
int main() {
  int i, a, b=0.0, c=0.0;
  for ( i = 0; i < 2; i++ )
  {
        sum (&a, &b);
        c = c+b;
  }
  printf("%d\n", c);
}

void sum(int *a , int *b){
  int i;
  for ( i = 0; i <6; i++ )
  {
        *a = i*i;
        *b = (*b) + (*a);
  }
  return;
}

<强>输出:

165

我已完成所需的代码格式化并将函数参数更改为指针类型。