2013-01-18 3 views
-2
#include<stdio.h> 

int main() 
{ 
    int line,linex; 

    printf("Enter number of lines: "); 
    scanf("%d",&line); 
    linex=line; 

    while(line!=0) 
    { 
     int input=0,total=0,number=0; 

     printf("Enter line %d: ",(linex-line+1)); 
     scanf("%d",input); 

     while (input!=-1) 
     { 
      total+=input; 
      number++; 
     } 
     printf("Average = %f\n",(total/number)); 
     line-=1; 
    } 
    return 0; 
} 

Выше мой код, который будет запрашивать у пользователя количество строк, цифры в каждой строке и затем распечатывать среднее значение для каждой строки. Дело в том, что когда я пытаюсь запустить это в Microsoft Visual C++ 2010 express, программа выйдет из строя. Он падает после ввода -1, чтобы разбить второй цикл WHILE.Сбой кода C при запуске

+1

Как Давид писал зсапЕ нужен адрес переменной ввода. BTW, ваш внутренний цикл while будет пропущен, или он будет введен и никогда не останется, потому что 'input! = - 1' является инвариантом цикла. –

+0

Помимо сбоя, 'total/number' является целым числом, а не плавающим, поэтому у вас есть неопределенное поведение. Используйте '(float) total/number', который преобразует' total' в 'float', так что выполняется деление с плавающей запятой (также будет работать« total/(float) number »). –

ответ

4
scanf("%d",input); 

Должно быть:

scanf("%d",&input); 
+0

* facepalm * Да, вот что вызывает крах, спасибо – watisit

0

это происходит сбой, потому что вы забыли передать адрес для Scanf функции т.е. вы забыли написать & в момент зсапЕ. Должно быть

scanf("%d",&input); 
3

Несвязанный, но

while (input!=-1) 
    { 
     total+=input; 
     number++; 
    } 

представляет собой бесконечную петлю. И если вы вводите -1 в первый раз, то

printf("Average = %f\n",(total/number)); 

- это деление на ноль. Оба должны быть исправлены

+0

Спасибо за совет. – watisit

+0

«является делением на ноль». Помимо этого, это неопределенное поведение, потому что это 'int', а не' float'. –

0
scanf("%d",input); 

должен быть

scanf("%d",&input); 

и проверить, если number != 0 до разделения

printf("Average = %f\n",(total/number)); 
0

грохот происходит из-за бесконечного цикла

while (input!=-1) 
{  
     total+=input; 
     number++; 
} 

фиксирующим это цикл мы делаем.

больше потенциальных ошибок:

scanf("%d",input); //& missing 

printf("Average = %f\n",(total/number)); // may cause divide by zero 
Смежные вопросы