#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 !!!