获取输出的C程序有问题

时间:2018-03-15 07:18:07

标签: c

这是一个简单的程序

#include<stdio.h>
void get(int,int);

void main()
{
  int a,b;
  get(a,b);
  printf("In main");
  printf("%d",a);
}

void get(int m,int n)
{
  printf("enter the value");
  scanf("%d%d",&m,&n);
}

我的输出是

enter the value

    4
    5

在main中:

0

为什么m中的get()的值未分配到a中的main()?我的错是什么?

4 个答案:

答案 0 :(得分:2)

您通过值传递主变量。阅读有关如何通过引用传递here的信息。 scanf需要变量地址才能修改它们;所以你需要传递他们的地址:

get(&a, &b);

您可以像这样修改get()方法:

void get(int* pM,int* pN) {
  printf("enter the value");
  scanf("%d%d, pM, pN);
}

答案 1 :(得分:0)

你的scanf读入函数局部变量,它将你给出的值作为参数存储到函数中 它们的值在您作为函数参数提供的变量中不可见 您可能希望使用指向变量的指针作为参数,然后读取值可以在这些指针参数指向的变量中结束。

答案 2 :(得分:0)

这基本上是由于变量的范围而发生的,因为整数是按值传递的,而不是通过引用传递的。

您需要返回ab的值才能使main()中出现这些值。

在这里看到更多 https://www.tutorialspoint.com/cprogramming/c_function_call_by_value.htm

#inlcude<stdio.h>
int get(int,int);
void main() {
    int a,b;
    a = get(a,b);
    printf("In main");
    printf("%d",a);
}
int get(int m,int n){
    printf("enter the value");
    scanf("%d%d,&m,&n);
    return m;
}
  

输入值

     

10 20

     

主要

     

10

另外,请阅读有关缩进代码以使其更具可读性的信息。

答案 3 :(得分:0)

  

为什么get()中m的值未分配给main()?我的错是什么?

首先,您需要了解参数传递的概念。
[如果您不了解正式和实际参数,请查看this]

从技术上讲,C中的所有内容都是按值传递的。在这里,

get(a,b);

您将ab变量的值传递给函数get()实际参数 ab的值将复制到形式参数 mn [在这种情况下,ab变量的值是垃圾,因为您尚未初始化它们。对调用函数中形式参数(mn)的值的任何修改都不会反映在实际参数(ab)中,因为形式参数存储是分离。因此,mget()的值未分配给a中的main()

答案的一部分是基于您已经了解C语言中指针的概念的假设。如果没有,我建议选择一本好的C语言书/教程,并通过指针的概念。

C语言提供了一种将指针传递给函数的工具,该函数也只是按值传递。它将指针的值(即地址)复制到函数形式参数中,您可以通过取消引用指针来访问存储在该地址的值。因此,传递的地址中的值所做的任何更改都将反映在调用函数的实际参数中。

所以,你可以这样做:

#include<stdio.h>

void get(int *, int *);

int main()
{
    int a, b;
    get(&a, &b);
    printf("In main\n");
    printf("a : %d, b = %d\n", a, b);
}

void get(int *m,int *n)
{
    printf("Enter the value:\n");
    scanf("%d%d", m, n); // m holds the address of a and n holds the address of b variable. 

    printf("Value entered:\n");
    printf("%d %d\n", *m, *n); //dereferencing the pointer m and n
}