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

当我用C语言编写代码时,当问题需要使用输出进行进一步的计算时,我经常会感到困惑。

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

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

就像在我们从用户那里获取input的时候一样,只要说出scanf()并继续即可。

最终从一些网站阅读了一些代码后,我明白了,但我从来没有得到它。 也许我需要知道一些真正重要的东西,所以以为你们会是最好的,就像你们一直在寻求帮助一样。

我希望在阐述我的困难的时候我很清楚。

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

编辑2
@ bta-谢谢。 可以说: –

例1:一个问题,要求我输出一个斐波那契数列,并且从输出中添加所有的偶数。

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

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

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

拿一个例子来说就是:

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

在打印出data的价值之后,你不能做任何事情。 到达函数的末尾,函数返回时,释放该函数范围内的数据。

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

只要保存数据的变量没有超出范围,就不会有太多问题重复使用数据。 打印/显示数据不会改变或破坏数据,唯一的办法就是失去重用数据的能力,如果持有数据的变量被破坏(超出范围或被free ) 。

从你的描述中,很难获得你正在谈论的究竟是什么。 你能给我们一个例子(在代码中)像你在谈论的情况吗?

更新:根据您的编辑,看起来您并不完全了解正在发生的事情。 将数据打印到屏幕上时,根本不会改变数据。 您仍然有能力修改,访问和重新使用数据,就像您在显示数据之前一样。 你不应该再做任何事情来再次使用数据。 使用你的一个例子,假设你有一个包含一系列斐波那契数列的数组:

 int sequence[100]; int i, sum; fill_with_fibonacci_sequence(sequence); // or however else you get your initial data // Print out the sequence printf("The Fibonacci sequence is: "); for (i=0; i<100; ++i) { if ((i & 0x7) == 0) printf("\n "); printf("%i ", sequence[i]); } // Sum all of the even numbers from the sequence sum = 0; for (i=0; i<100; ++i) { if ((sequence[i] & 0x1) == 0) sum += sequence[i]; } printf("The sum of the even numbers is: %i\n", sum); 

在这里,我们打印数组中的每个值,然后转向并重新处理该数组以求和偶数。 打印数组不会改变数组本身,所以为了重新使用数据,没有特别的需要做。

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

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

这只是意味着:

 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一些东西时,你使用系统调用把它发送给内核。 再次把它作为输入是没有意义的。