Почему мой c-код неправильно хранит и / или отображает значения массива, введенные пользователем?

#arrays #c #scanf

#массивы #c #scanf

Вопрос:

 #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define NUMS 3

int main(void) // call main
{
    int high[NUMS] = { 0 }; // single int for high
    int low[NUMS] = { 0 }; // single int for low
    double a = 0; 
    double b = 0;
    double c = 0;
    double d = 0;
    double e = 0;
    double f = 0;
    double total = 0;
    double avg = 0;
    int i = 0;

    for (i = 0; i < NUMS; i = i   1) // for loop running to have the user input 3 day's worth of temperatures
    {
        printf("Enter the high value for day %d: ", i   1);
        int tempHigh = scanf("%d", amp;high[i]);

        printf("Enter the low value for day %d: ", i   1);
        int tempLow = scanf("%d", amp;low[i]);

        while (high[i] < low[i] || high[i] > 40 || low[i] < -40) // while loop checks that each temperature fits the criteria
        {
            printf("Incorrect values. Try again.n");
                
            printf("Enter the high value for day %d: ", i   1);
            int tempHigh2 = scanf("%d", amp;high[i]);

            printf("Enter the low value for day %d: ", i   1);
            int tempLow2 =scanf("%d", amp;low[i]);     
        }
    }

    a = (double)high[0]; // each temperature stored as its own variable outside of the array and converted to double
    b = (double)high[1];
    c = (double)high[2];
    d = (double)low[0];
    e = (double)low[1];
    f = (double)low[2];
    total = a   b   c   d   e   f; // calculating total
    (double)avg = total / ((double)NUMS * 2); // calculating average

    printf("The average temperature of the three days is: %p", amp;avg); // printing average.

    return 0;

}
  

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

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

1. ...%p", amp;avg) выводит адрес этой переменной. Я предлагаю ...%f", avg) . Функция printf() похожа scanf() , но совершенно другая.

2. Что есть в выводе, а что нет?

3. @WeatherVane Я изменил его на %f, и теперь он печатает числа, но это приводит только к 0, поэтому я не думаю, что значения сохраняются до сих пор

4.Не удается воспроизвести после изменения нарушающей строки на printf("The average temperature of the three days is: %f", avg); . Это два изменения. Конечно, среднее значение может быть 0.000000 , но оно не будет вашим заявленным 0 .

5. @WeatherVane мои тестовые значения равны 5 и 2 для каждого дня, поэтому среднее значение определенно не равно 0.

Ответ №1:

ОТРЕДАКТИРОВАЛ ВАШ КОД

 #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define NUMS 3

int main(void) // call main
{
    int high[NUMS] = { 0 };  // single int for high
    int low[NUMS] = { 0 };  // single int for low
    double a = 0,b = 0,c = 0,d=0,e=0,f=0,total=0,avg=0;
    int i = 0;

    for (i = 0; i < NUMS; i = i   1) // for loop running to have the user input 3 day's worth of temperatures
    {
        printf("Enter the high value for day %d: ", i   1);
        int tempHigh = scanf("%d", amp;high[i]);

        printf("Enter the low value for day %d: ", i   1);
        int tempLow = scanf("%d", amp;low[i]);

        while (high[i] < low[i] || high[i] > 40 || low[i] < -40) // while loop checks that each temperature fits the criteria
        {
            printf("Incorrect values. Try again.n");
                
            printf("Enter the high value for day %d: ", i   1);
            int tempHigh2 = scanf("%d", amp;high[i]);

            printf("Enter the low value for day %d: ", i   1);
            int tempLow2 =scanf("%d", amp;low[i]);     
        }
    }

    a = (double)high[0]; // each temperature stored as its own variable outside of the array and converted to double
    b = (double)high[1];
    c = (double)high[2];
    d = (double)low[0];
    e = (double)low[1];
    f = (double)low[2];
    total = a   b   c   d   e   f; // calculating total
    //EDITTED IN THE NEXT LINE//
    avg = total / ((double)NUMS * 2); // calculating average
    //EDITTED IN THE NEXT LINE//
    printf("The average temperature of the three days is: %lf", avg); // printing average.

    return 0;
}