Проблемы с массивами и 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

Другие вопросы по тегам