有效地打印多个变量的值

时间:2015-06-09 15:40:52

标签: c loops

当我必须编写一个包含多个变量的程序时,这个问题突然出现在我的脑海中,每个变量都存储一个数字的单个数字。让我们说我在main(或其他一些函数)中声明了几个变量:

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

int main(void)
{
        int n_1 = 1;
        int n_2 = 2;
        int n_3 = 3;
        int n_4 = 4;
        int n_5 = 5;
        /*
        More variables
                .
                .
                .
        followed by multiple printf()s
        */

        exit(EXIT_SUCCESS);
}

假设由于一些不幸的情况,我需要所有这些单独的变量,我不能使用数组或使用不同的,更有效的解决方案。

如果我想打印存储在每个变量中的值,我当然可以通过单独调用printf()或单次调用printf()来打印每个变量。但我能否更有效地实现同样的目标。如果有可能在循环中执行此操作,我特别感兴趣。脚本语言中常见的解决方案是使用for循环中的迭代器变量的值来完成变量的名称,因为名称具有固定的结构,如下所示:

for (int i; i < n; ++i) {
        printf("%d\n", n_i);
}

但这显然不适用于C(我知道为什么所以不需要指出这一点)。那么有经验的人对此有何看法?

2 个答案:

答案 0 :(得分:1)

这是使用指针数组执行此操作的一种方法:

#include <stdio.h>

#define countof(A) (sizeof(A) / sizeof(A[0]))

int main(void) {
    int n_1 = 1;
    int n_2 = 2;
    int n_3 = 3;
    int n_4 = 4;
    int n_5 = 5;

    int* vars[] = { &n_1, &n_2, &n_3, &n_4, &n_5 };

    for (int v = 0; v < countof(vars); v++) {
        printf("%d\n", *vars[v]);
    }
    return 0;
}

我猜测,您可以为一个给定范围内的所有vars变量生成n_的宏,以防止必须输出其初始化程序。

很难想象会阻止你使用直接阵列的情况。你可以用C中的局部变量做任何事情,你也可以使用数组元素,包括获取它的地址:它们都是左值,并且禁止扩展,可以在完全相同的上下文中使用。

答案 1 :(得分:0)

答案是&#34; no&#34;因为程序文本没有被解释,就像脚本语言一样。您可以将变量声明为数组并索引数组以打印变量。

int a[5], i;
....
for (i=0; i<5; i++) printf("%d",a[i]);
printf("\n");