2012-06-09 65 views
-1

這是我的代碼:ç返回int值不起作用

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

int num_mezzo_1(int num_orig); 
int num_mezzo_2(int num_orig); 

int main(int argc, char *argv[]){ 
    int num,contatore,tmp=0,tmp_1,tmp_2; 
    num=atoi(argv[1]); 
    if(num <= 3){ 
     printf("%d è primo\n", num); 
     exit(0); 
    } 
    else{ 
     num_mezzo_1(num); 
     num_mezzo_2(num); 
     tmp=tmp_1+tmp_2; 
      //using printf to debug 
     printf("t1 %d, t2 %d\n", tmp_1,tmp_2); 
     if(tmp>2){ 
      printf("%d NON è primo\n", num); 
     } 
     else{ 
      printf("%d è primo\n", num); 
     } 
    } 
    exit(0); 
} 

int num_mezzo_1(int num_orig){ 
    int tmp_1=0,cont_1; 
    for(cont_1=1; cont_1<=(num_orig/2); cont_1++){ 
     if((num_orig % cont_1) == 0){ 
      tmp_1++; 
     } 
    } 
    //using printf to debug 
    printf("\n%d\n", tmp_1); 
    return tmp_1; 
} 

int num_mezzo_2(int num_orig){ 
    int tmp_2=0,cont_2; 
    for(cont_2=((num_orig/2)+1); cont_2<=num_orig; cont_2++){ 
     if((num_orig % cont_2) == 0){ 
      tmp_2++; 
     } 
    } 
    //using printf to debug 
    printf("\n%d\n\n", tmp_2); 
    return tmp_2; 
} 

這個程序計算wheter一個數是素與否。
如果我給第13號作爲輸入,功能num_1有值1tmp_1和功能num_2具有值1tmp_2並且都是正確的。
問題是tmp=tmp_1+tmp_2返回一個大大大價值,我不明白爲什麼。

回答

6

您所呼叫的功能num_mezzo_1()num_mezzo_2()但你不保存其返回值,讓你的變量tmp_1tmp_2仍然未初始化的。

編輯:嘗試在其他塊中的代碼

num_mezzo_1(num); 
    num_mezzo_2(num); 

更改爲

tmp_1 = num_mezzo_1(num); 
    tmp_2 = num_mezzo_2(num); 

,看看你得到你所期望的。

工作代碼:

tmp=(num_mezzo_1(num)+num_mezzo_2(num)); 
+0

你是什麼意思與_ 「我不是存儲他們的價值觀」 _ ??? – polslinux

+0

你的函數中有變量tmp_1和tmp_2,但這些變量與主函數中的變量名稱不同。這些對你的num_mezzo函數是本地的。因此,main()中的tmp_1和tmp_2永遠不會被初始化。 – mathematician1975

+0

我已經用類似的方式解決了:D但是非常感謝:) – polslinux