2017-11-25 126 views
1

这是我的问题: 我需要在主函数中输入一个值X(一个数字),然后在其他函数中使用此扫描值。这是我的代码的一小部分,但我认为这足以理解我的意思。 我认为这是通过使用这样的int main(int argc, char *argv[], int Z),同样的事情在void函数或使用指针可以解决的,但是当我尝试它没有为我工作。也许有人可以解释并说明如何正确地做到这一点?在另一个函数中使用输入的值

int main(int argc, char *argv[]) { 
int Z; 
.... // rest of the code 
    printf("Enter Z value:"); 
    Z = scanf("%d", &Z); 
} 
void function1(float array[100]){ 
    int i, Z, A=0; 
    for(i=0; i<100;i++){ 
     if(array[i]>Z){ 
     A++; 
    } 
} 
+1

有很多事情在你的代码失踪。 – coderredoc

+1

@dazzle有一个function1的调用? –

+0

这只是我的代码的一小部分。我只需要知道如何获得我在主功能中输入的相同Z值,以便在第二个功能中可用。 – dazzle

回答

0

你已经在错误的方式使用的scanf。您将要覆盖阅读与scanfscanf返回的值的值。

int Z; 
... 
if(scanf("%d",&Z) == 1) 
// Z is inputted correctly 

现在你想通过它,有不同的方法来做到这一点。

您是否有可能在其他函数中将Z的值更改为您将其作为参数传递给它的函数,并且希望将更改后的值保留在被调用函数中?

如果是,那么你使用指针传递它的地址,然后derefrence它来访问原始变量。

someFun(&Z); 

然后在someFun()

void someFun(int * pZ){ 
    //read it 
    printf("%d", *pZ); 
    // write over it 
    if(scanf("%d",pz) == 1){ /**/ } 
    *pZ = 2017; 
} 

如果答案是否定的,那么你可以简单地传递变量的副本。可能在第一次打扰你

someFun1(Z); 

void someFun1(int ZZ){ 
    // read it 
    printf("%d", *pZ); 
    //write it 
    Z = 2017; 
    //But this change won't be reflected on the `main()` or callee function 
} 

一件事是既pZZZ是在函数分别someFun()someFun1()局部变量。但他们的内容是不同的。

在第一种情况,pZ是包含变量的地址ZZZ也含有相同的值Z一个局部变量的局部变量。那么你可能会问,为什么会有差异?

因为在第一种情况下,通过转到地址(取消指定它),您正在更改实际变量,其地址通过您的地址main()

在第二种情况下,您没有收到地址,您正在向本地变量someFun1发送chnage,并且chnage发生在与原始变量完全不同的位置。这就是为什么它不反映在main()

引用标准的scanf返回

§7.21.6.4

如果第一转换(如果有的话)已完成前出现输入 衰竭scanf函数返回宏EOF的值。 否则,scanf函数返回所分配$输入项目 ,其可以是少于规定的,或甚至零,在 事件的早期匹配失败的数目。

$:输入项目匹配成功并分配

+0

在我看到您的代码之前,用我自己的方法修复了它,不过谢谢! – dazzle

相关问题