Суммирование элементов 1D массива

#arrays #c #scanf

Вопрос:

Я пытаюсь добавить элементы линейного массива, используя код, как показано ниже, но результат, который я получаю, равен количеству элементов в массиве. Кажется, я не могу найти причину, почему.

 for(i=0;i<n;i  )
    {
        ar[i] = scanf("%d",amp;ar[i]);
        sum  = ar[i];  
    }
 

Вывод:- Количество элементов в массиве (n), которое неверно.

Следовательно, когда я пытаюсь ar[i] != scanf("%d",amp;ar[i]); вместо вышеприведенного, это дает правильный результат. За любую помощь мы будем благодарны.

Комментарии:

1. » Количество элементов в массиве (n), что неверно». — Как так?

2. scanf() : При успешном выполнении функция возвращает количество успешно заполненных элементов списка аргументов. Это число может соответствовать ожидаемому количеству элементов или быть меньше (даже равно нулю) из-за ошибки сопоставления, ошибки чтения или достижения конца файла.

Ответ №1:

Считанное значение перезаписывается количеством считанных данных, поскольку вы присваиваете возвращаемое значение scanf() ar[i] кому . Остановите назначение и используйте значение для проверки успешного чтения.

 for(i=0;i<n;i  )
    {
        if(scanf("%d",amp;ar[i]) != 1)
            {
                /* handle error */
            }
        sum  = ar[i];  
    }
 

Комментарии:

1. Спасибо, но что происходит, когда я использую ar[i] != scanf(«%d»,amp;ar[i]); в теле цикла ? Это дает правильную сумму.

2. @CarlZimmer ar[i] != scanf("%d",amp;ar[i]); делает бессмысленное сравнение, результат которого игнорируется.

Ответ №2:

Ваша ошибка здесь:

 ar[i] = scanf("%d",amp;ar[i]);
 

Просто измените на:

 scanf("%d",amp;ar[i]);
 

возврат от scanf должен составлять 1
Таким образом, он изменяет значение ar[i] после сканирования на 1. Следовательно, сумма-это количество элементов.

Комментарии:

1. Ответ @MikeCAT лучше, так как он учитывает обработку ошибок, когда результат scanf != 1 !!!