2014-12-04 68 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

相关问题