Почему значения, которые я печатаю в терминале, не совпадают со значениями, которые я уже сохранил в массиве? - PullRequest
1 голос
/ 08 мая 2019

Я делаю программу, которая позволяет мне читать целое число, введенное на терминале через функцию scanf, и генерировать присвоенное ему значение из уже созданного массива.Вот описание программы:

Ваша программа должна прочитать 10 целых чисел (количество, необходимое для каждого из ингредиентов, по порядку) и сохранить их в массиве.Затем следует прочитать целое число, представляющее идентификационный номер ингредиента (от 0 до 9), и вывести соответствующее количество.

#include <stdio.h>
int main () {
    int array[10];
    int store = 0;
    int i = 0;
    printf("write how much the ingredients weigh in grams\n");
    for (i=0; i<10; i++) {
        scanf("%d", array);
        printf("%i weighs %dg\n", i, array[store]);
    } 
    printf("Which ingredient ID do you want to check the weight of? ");
    int ingredient = 0;
    scanf("%d", &store);
    printf("The weight of this ingredient is: %d\n", ingredient[array]);
}

Например, если значения, хранящиеся в массиве: 23, 54, 12, 51, 11, 10, 99, 32, 9, 14, тогда я ожидал бы, что программа напечатает «12», когда я наберу «2» после того, как мне будет задан вопрос «Какой идентификатор ингредиента вы хотите проверить?вес?Однако в тот момент, когда я набираю число «6», например, оно сгенерирует значение, присвоенное номеру «8».Таким образом, он будет генерировать «9» вместо «99».

Как я могу это исправить?

1 Ответ

4 голосов
/ 08 мая 2019

Это здесь неправильно:

scanf("%d", array);

Хранит значение чтения в первом элементе.Поскольку он хранит их все там, он просто перезаписывает их все время, в результате чего ваше последнее значение равно array[0], а остальное неинициализируется.Сделайте это вместо:

scanf("%d", &array[i]);

То же самое относится к отладочной печати, оно должно быть:

printf("%i weighs %dg\n", i, array[i]);

Также здесь есть проблема:

printf("The weight of this ingredient is: %d\n", ingredient[array]);

ingredient[array] - это array[ingredient] ( объяснение здесь ), но ingredient всегда 0, потому что вы его не меняете.Следовательно, он всегда читает этот первый элемент массива (элемент, который вы установили последним, из-за другой проблемы).Сделайте array[store] вместо этого.Вы можете удалить переменную ingredient, она не нужна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...