#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);
Комментариев нет:
Отправить комментарий