Проблемы с массивами и scanf; значения для использования с scanf
Это простая программа для расчета возраста людей в комнате. Я на самом начальном этапе, и теперь я вижу, что я не знаю, какие переменные (я имею в виду переменные, которые я объявляю перед scanf, а затем заполнители внутри scanf) использовать для scanf; как выбрать и применить правильную переменную. Есть ли ресурс, который мог бы объяснить на простом английском языке эти проблемы? Вот программа:
// Ages people by a year. Arrays
#include <stdio.h>
int main (void)
{
// determine number of people
int n;
do
{
printf("Number of people in room: ");
scanf ("%i", &n);
}
while (n<1); // get the number of people in the room, pass through user
// again and again until the user gives a positive integer
// declare array in which to store everyone's age
int ages[n];
int i;
for (i = 0; i < n; i++)
{
printf("Age of person #%i: ", i + 1); // person number 1, person number 2, etc
scanf ("%d", ages[i]); // store the age in the i-th part of the array ages
}
// report everyone's age a year hence
printf("Time passes...\n\n");
for (i = 0; i < n; i++)
{
printf(" A year from now person #%i will be %i years old.\n", i + 1, ages[i] + 1);
// we add 1 year to previous age
}
}
2 ответа
scanf("%d")
ожидает адрес в качестве аргумента. Поэтому заменить
scanf ("%d", ages[i]);
с
scanf ("%d", ages + i);
(или же &ages[i]
но это личное предпочтение.)
scanf
ожидает указатель на некоторую переменную для изменения ее значения - в противном случае он получит некоторую копию, которая не повлияет на реальную переменную.
эта строка:scanf ("%d", ages[i]);
разыменовать ages
и возвращает целое число, а не указатель на целое число. изменить это, чтобы быть scanf ("%d", &ages[i]);
&
будет извлекать адрес памяти ages[i]
и передать его в качестве указателя на scanf