我们如何使用程序的输出进行进一步的计算? C(Linux)

时间:2010-09-03 18:00:00

标签: c linux

当我用C编写代码时,当问题/问题要求使用输出进行进一步计算时,我常常感到困惑。

例如,如果我们必须打印一个数组然后只添加素数

或类似的东西。我卡住了,我不知道如何处理这些问题。

与我们收集用户的意见时一样,只需说出scanf()即可继续。

最终在从某些网站上阅读了一些代码后,我得到了它,但我从来没有得到它。也许我需要知道一些非常重要的事情,所以我们认为你们最好是寻求帮助,就像你们一直在寻找帮助一样。

我希望我能清楚地说明我的困难。

EDIT1
 我想继续在同一个程序中处理结果。 我上面提到了一个例子。我只是强调它。

编辑2
@ bta-谢谢。 让我们说: -

示例1:一个问题,要求我输出Fibonacci系列,并添加输出中的所有偶数。

示例2:一个问题,要求我输出一个数组,然后将数组中的所有偶数(输出)加起来并再次打印出来。

当我在各种网站上查看时,我得到了这些问题的答案,但我的问题是我应该怎样做才能使我的基本原理正确。

2 个答案:

答案 0 :(得分:4)

如果要在打印出来之后继续处理某些内容,请确保包含数据的变量保留在范围内。

以一个类似的函数为例:

void sample_function (void) {
    int data;

    scanf("%d\n", &data);
    printf("The input was: %d\n", data);
}

打印出data的值后,您无法执行任何其他操作。到达函数的末尾,当函数返回时,释放该函数范围内的数据。

在函数返回后可以使用该数据,但您必须稍微改变一下您的技术。一种可能性是使data成为全局变量而不是函数内的局部变量。您也可以使用函数的返回值传回data的值,或者您可以将int*传递给函数,并让函数使用该指针存储数据。使用这些技术中的任何一种,您都应该能够调用sample_function之类的函数,并在函数返回后将数据保留在范围内。

只要保存数据的变量不会超出范围,您就不应该一遍又一遍地重复使用数据。打印/显示数据不会改变或破坏它,只有这样才能失去重新使用数据的能力,即保存数据的变量被破坏(超出范围或被{{1 }} d)。

根据您的描述,很难准确了解您正在谈论的内容。你能给我们一个你正在谈论的情况的例子(代码中)吗?

<强>更新 根据您的编辑,您似乎并不完全了解正在发生的事情。当您将数据打印到屏幕时,您根本不会更改数据。您仍然可以像显示数据一样修改,访问和重复使用数据。您不应该特别重复使用数据。使用你的一个例子,假设你有一个包含Fibonacci序列中一系列数字的数组:

free

在这里,我们打印数组中的每个值,然后转身并重新处理数组,以便对偶数项求和。打印出阵列不会改变阵列本身,因此无需特别重复就可以重新使用数据。

答案 1 :(得分:3)

我认为你误解了这个问题。

如果问题是“创建数组,打印并添加偶数”并不意味着程序必须重新使用其输出作为新输入(!)。

这只是意味着:

int
main (int argc, char *argv[])
{
    int i,
        sum,
        array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 , 10};

    for (i = 0; i < sizeof(array)/sizeof(array[0]); i++) {
        printf("%d ", array[i]);
    }
    printf("\n");

    sum = 0;
    for (i = 0; i < sizeof(array)/sizeof(array[0]); i++) {
        if (array[i] % 2 == 0) {
            sum = sum +array[i];
        }
    }
    printf("%d\n", sum);

    return EXIT_SUCCESS;
}

当您printf某事时,您将使用系统调用将其发送到内核。再把它作为输入只是没有意义。