当我用C编写代码时,当问题/问题要求使用输出进行进一步计算时,我常常感到困惑。
例如,如果我们必须打印一个数组然后只添加素数
或类似的东西。我卡住了,我不知道如何处理这些问题。
与我们收集用户的意见时一样,只需说出scanf()
即可继续。
最终在从某些网站上阅读了一些代码后,我得到了它,但我从来没有得到它。也许我需要知道一些非常重要的事情,所以我们认为你们最好是寻求帮助,就像你们一直在寻找帮助一样。
我希望我能清楚地说明我的困难。
EDIT1
我想继续在同一个程序中处理结果。
我上面提到了一个例子。我只是强调它。
编辑2
@ bta-谢谢。
让我们说: -
示例1:一个问题,要求我输出Fibonacci系列,并添加输出中的所有偶数。
示例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
某事时,您将使用系统调用将其发送到内核。再把它作为输入只是没有意义。