Страницы

Поиск по вопросам

понедельник, 30 декабря 2019 г.

Почему в int переменной странное число?

#c


Почему переменная t выводит на экран не то?

#include 
#include 

int a[7];

void vvoda(){
    puts("Puts values for a array");
    for(int i = 0; i < 7; i++)
        scanf("%i", &a[i]);
}

void suma(){
    int t;
    for(int i = 0; i < 7; i++){
        t += a[i];
        t = t/7;
        printf("%i\n", &t);
    }
    printf("Average of a array is %i", &t);
}

main(void){
    vvoda();
    suma();
}


Вот что выдает консоль:


Puts values for a array
4
5
45
4
54
5
4
2293272
2293272
2293272
2293272
2293272
2293272
2293272
2293272
Average of a array is 2293272
--------------------------------
Proccess exited after 2.143 seconds with return value 0
Для продолжения нажмите любую клавишу . . .


    


Ответы

Ответ 1



Во-первых, у вас не инициализирована локальная переменная t void suma(){ int t; ^^^^^^ Во-вторых, если вы используете выражение t = t/7;, то логично было бы объявить эту переменную, как число с плавающей запятой, например, имеющую тип double. Иначе у вас будет отбрасывание дробной части, то есть будет иметь место целочисленное деление. Например, при t равным 4 выражение t/7 будет равно 0. И, в-третьих, в данных предложениях вывода printf("%i\n", &t); ^^^^ printf("Average of a array is %i", &t); ^^^^ вы должны использовать саму переменную, а не указатель на нее. printf("%i\n", t); printf("Average of a array is %i", t); Имейте в виду, что согласно стандарту C функция main без параметров должна иметь объявление int main( void ) ^^^ Также вместо магического числа 7 было бы лучше ввести именованную константу, как, например, #define N 7 и использовать это имя вместо числа. Например #define N 7 int a[N]; void vvoda(){ puts("Puts values for a array"); for(int i = 0; i < N; i++){ scanf("%i", &a[i]); } } // и т.д. Также не было никакой необходимости объявлять массив a глобальным. Заголовок можно исключить из программы, так как ни одно определение из этого заголовка не используется.

Ответ 2



Потому, что переменная t лежит на стеке. Переменные, которые лежат на стеке "инициализируются" "мусором". Нужно сделать так: int t = 0; А вместо printf("%i\n", &t); написать printf("%d\n", t);

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

Отправить комментарий