我想为长篇文章道歉,而且在我的帖子和代码中几乎没用,但我希望尽可能清楚。
我的问题非常基本:
您将获得一个大小为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
,我用它来获取每个数字作为字符串数组的元素,然后我逐个元素地将它们转换成我的main函数中的一个int数组。
以下是代码:http://imgur.com/erS0gYc
这似乎有效,但在www.hackerrank.com(A Very Big Sum)提交问题时,出现了这个问题:
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
是如何工作的,但我已经达到了可以使用它将字符串数组转换为整数数组的程度。
我理解hackerrank的问题是,第一个fgets函数的缓冲区。
最后,我想知道最容易做的事情,就是将空格分隔的数字放入数组中。
非常感谢!
答案 0 :(得分:0)
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
。
答案 1 :(得分:0)
scanf("%d", &n);
for (i=0; i<n; i++) {
scanf("%d", &x);
sum += x;
}
不适合你吗?为什么呢?