Почему переменная t выводит на экран не то?
#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
", &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
Для продолжения нажмите любую клавишу . . .
Ответ
Во-первых, у вас не инициализирована локальная переменная t
void suma(){
int t;
^^^^^^
Во-вторых, если вы используете выражение t = t/7;, то логично было бы объявить эту переменную, как число с плавающей запятой, например, имеющую тип double. Иначе у вас будет отбрасывание дробной части, то есть будет иметь место целочисленное деление. Например, при t равным 4 выражение t/7 будет равно 0
И, в-третьих, в данных предложениях вывода
printf("%i
", &t);
^^^^
printf("Average of a array is %i", &t);
^^^^
вы должны использовать саму переменную, а не указатель на нее.
printf("%i
", 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 глобальным.
Заголовок
Комментариев нет:
Отправить комментарий