用户输入的数组元素之和的问题

时间:2015-08-19 15:49:58

标签: c arrays int user-input fgets

我想为长篇文章道歉,而且在我的帖子和代码中几乎没用,但我希望尽可能清楚。

我的问题非常基本:

  

您将获得一个大小为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函数的缓冲区。

最后,我想知道最容易做的事情,就是将空格分隔的数字放入数组中。

非常感谢!

2 个答案:

答案 0 :(得分:0)

for(i=0;i'<'n;i++) // i<n should be there not '<'(as this wont work).
scanf("%d", &a[i]);  

在按enter之前,您不会在单独的行中输入输入,而是可以在数字之间按space

看到输入的大小,您应该使用longlong long

答案 1 :(得分:0)

scanf("%d", &n);
for (i=0; i<n; i++) {
    scanf("%d", &x);
    sum += x;
}

不适合你吗?为什么呢?