2014-12-04 70 views
-1

比方說,我有這樣的功能:如何在C中保存一個讀入函數的變量?

void read() { 
    int num; 
    scanf("%d", &num); 
} 

,我想使用num變量在這樣的另一個功能:

void func() { 
    for (i = 0; i < num; i++) 
     printf("%d ", i); 
} 

但是在編譯的時候,它說的變量未初始化。我知道它很可能需要指針,但我無法得到它的一個竅門。

回答

2

有兩種方法可以去這樣做:

  • 返回你閱讀到呼叫者的變量,或
  • 有來電了變量提供空間,並將其存儲在那裏。

第一種方法需要你的返回類型更改爲int

int read() { 
    int num; 
    scanf("%d", &num); 
    return num; 
} 

void func() { 
    int num = read(); 
    for (i = 0; i < num; i++) 
     printf("%d ", i); 
} 

第二種方法需要你採取int*指針:

void read(int* p) { 
    scanf("%d", p); 
} 

void func() { 
    int num; 
    read(&num); 
    for (i = 0; i < num; i++) 
     printf("%d ", i); 
} 
+0

還有第三個辦法:調用任何需要從你的函數的數據。儘管這並沒有真正的規模。 – Deduplicator 2014-12-04 15:32:21

+0

我應該提到read()函數也有一些{printf}的,所以如果我運行read(#)它將會填滿無用的打印。 – 2014-12-04 15:44:35

+0

@AntiDeeagle'read()'是你的功能,所以完全取決於你打印或不打印任何你喜歡的東西。如果你需要一個沒有'printf'的版本,可以創建一個沒有'printf'的版本,並用'printf'來調用它。 – dasblinkenlight 2014-12-04 15:49:03

0

可以使變量全球功能內:

void func() { 
    int i; 
    for(i=0;i<num;i++) 
    printf("%d ", i); 
} 
+0

這可能不是最具擴展性的方法。 – doctorlove 2014-12-04 15:29:51

+0

你是對的。我想另一種方式。 – 2014-12-04 15:32:12

+0

避免使用'static'和'thread_local'數據;在可能的情況下計劃重新使用和重入併發。 – Deduplicator 2014-12-04 15:34:03

0

你並不總是需要指針 - 你可以簡單地返回值然後使用它。

int read() { 
    int num; 
    scanf("%d", &num); 
    return num; 
} 

您現在可以存儲函數返回的值以備將來使用,例如,

void func() { 
    int num = read(); 
    for (i = 0; i < num; i++) 
     printf("%d ", i); 
} 
+0

我應該提到read()函數也有一些{printf},所以如果我運行read(#)它將會填滿無用的打印。 – 2014-12-04 15:45:26

+0

也許打印應該是可配置的 - 具有「讀取」功能也會寫東西不直觀,因爲它不止一件事。你可以嘗試以不同的方式雕刻它。 – doctorlove 2014-12-04 15:50:17

1

func應該是,

void func(int num) { 
    for (i = 0; i < num; i++) 
     printf("%d ", i); 
} 

而且你還需要傳遞值一樣,

void read() { 
    int num; 
    scanf("%d", &num); 
    func(num); 
} 
+0

我應該提到read()函數也有一些{printf}的,所以如果我運行read(#)它會填滿無用的打印。 – 2014-12-04 15:44:52

相關問題