根据用户在数组基础上的输入添加值

时间:2017-11-28 08:23:20

标签: c arrays sum

我坚持使用这段代码:

int main()
{
    int a[ ] = {0};
    int n,sum = 0;

    printf("Enter your element: ");
    scanf("%d", &a[n]);

    while(n != -1)
    {
        sum = sum + a[n];

        printf("Enter your element: ");
        scanf("%d", &n);
    }

    printf("The sum is %d", sum);
}

我的目的是提示用户输入将存储在数组元素中的值,然后给他输入的值的总和。

但是代码没有显示任何错误,但最终会产生垃圾值。

2 个答案:

答案 0 :(得分:0)

如果function * manyActionsSaga() { let flowPromise = Promise.resolve(); while(true) { const action = yield take(['ACTION_1', 'ACTION_2', 'ACTION_3']); yield call(() => flowPromise) flowPromise = flowPromise.then(() => { // Similar event handling }) } } 这是Undefined Behavior,则

scanf("%d", &a[n]);访问数组索引。

并且n!=0未初始化。所以使用它作为索引在数组中使用一些不确定的值作为索引。

n不是详尽的检查。更好的是while(n!=1),因为数组只有1个元素。

也许你想要这个

n==0

请注意,此程序存在以下缺陷,#include<stdio.h> #include<stdlib.h> int main() { int n; printf("Enter no of element: "); if( scanf("%d", &n) != 1){ fprintf(stderr,"%s","Error in input"); exit(1); } if( n <= 0){ fprintf(stderr,"Enter positive number of elements"); exit(1); } int a[n]; int sum = 0; for(size_t i = 0; i < n; i++){ if( scanf("%d",&a[i]) != 1){ fprintf(stderr,"%s","Error in input: give integers"); exit(1); } sum+=a[i]; } printf("The sum is %d", sum); } 很难克服这些缺陷 - 您可以尝试使用scanf()strtol <修改此错误/ p>

  1. 如果用户输入的内容不是此范围overflow-checking,则会溢出。 (Soln:使用[INT_MIN,INT_MAX]

  2. 对于总和不在此范围内的任何大输入,Sum可能会溢出。 (溢出检查:

    strtol

答案 1 :(得分:0)

你可能想要这个:

#include <stdio.h>

int main()
{
  int a[100] = { 0 };   // array of 100 numbers all initialized to 0
  int sum = 0;
  int n = 0;

  do
  {
    printf("Enter your element: ");
    int number;
    scanf("%d", &number);

    if (number == -1)
      break;

    a[n] = number;
    sum += a[n];
    n++;
  }    
  while (1);

  printf("The sum is %d", sum);
}

免责声明:没有错误检查,也没有检查是否输入超过100个数字导致索引超出范围问题。