我想为我的帖子和代码中的冗长内容以及大部分无用内容道歉,但我希望尽可能清楚。
我的问题是一个非常基本的问题:
你会得到一个N大小的整数数组。你需要打印数组元素的总和。输入的第一行由一个整数N组成。下一行包含描述数组的N个空格分隔的整数
样本输入:
5
1000000001 1000000002 1000000003 1000000004 1000000005
我通常会用scanf询问n,然后做:
for(i=0;i<n;i++)
scanf("%d", &a[i]);
但这是针对单独行上的数字
或者我可以做一些类似的事情
scanf("%d %d %d", &a[0], &a[1], &a[2]);
但我必须知道在执行程序之前会有多少元素。
所以我在网上找到了一个函数parseString
,我用它把每个数字作为字符串数组的一个元素,然后在主函数中将它们逐元素转换为int数组。
这是代码:https://i.stack.imgur.com/ZYheV.jpg
这似乎是有效的,但当在www.hackerrank.com(一个非常大的金额(上提交问题时,出现了以下内容:
In file included from /usr/include/stdio.h:937:0,
from solution.c:3:
In function 'fgets',
inlined from 'main' at solution.c:42:3:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:261:2: warning: call to '__fgets_chk_warn' declared with attribute warning: fgets called with bigger size than length of destination buffer
return __fgets_chk_warn (__s, __bos (__s), __n, __stream);
^
我不完全理解parseString
是如何工作的,但我已经到了可以使用它将字符串数组转换为int数组的地步
据我所知,hackerlink的问题在于第一个fgets函数的缓冲区。
最后,我想知道最简单的方法是,将空格分隔的数字放入数组中。
非常感谢!
scanf("%d", &n);
for (i=0; i<n; i++) {
scanf("%d", &x);
sum += x;
}
不适合你吗?为什么?
for(i=0;i'<'n;i++) // i<n should be there not '<'(as this wont work).
scanf("%d", &a[i]);
在按下enter
之前,这不会在单独的行上进行输入。您可以在数字之间按下space
。
看到输入的大小,您应该使用long
或long long
。