2015-06-30 4 views
-3

У меня есть программа на полпути, за исключением случаев, когда я перехожу к кубу числа/квадрата число/отображение нечетное или даже не вводя число, вместо этого просто указывая «Вы не ввели число «Я получаю ошибку проверки выполнения №3, а затем действительно большое отрицательное число. Это, очевидно, не то, что я хочу.Ошибка проверки времени выполнения 3 в случае

#include<stdlib.h> 
#include<stdio.h> 


//begin function 
int main() 
{ 

//declare variables 
int choice; 
int number = 0; 
int cubed; 
int squared; 

//menu and begin do while loop 
do { 


printf("***********************\n"); 
printf("--Main Menu---\n"); 
printf("***********************\n"); 
printf("1.Enter a number\n"); 
printf("2.Cube the number\n"); 
printf("3.Square the number\n"); 
printf("4.Display Even or Odd\n"); 
printf("5.Quit\n"); 

printf("Enter your choice: "); 
scanf("%i", &choice); 

printf("Your current number is: %i \n", number); 

//begin switch and functions 
switch(choice){ 

case 1: 
     printf("Enter a number\n"); 
     scanf("%i", &number); 
break; 

case 2: 

     if (number == 0) 
     printf("You have not entered a number\n"); 
     else 
     cubed= number * number * number; 
     printf("Your number cubed is: %i \n", cubed); 
break; 

case 3: 
     if (number == 0) 
     printf("You have not entered a number\n"); 
     else 
     squared= number * number; 
     printf("Your number squared is: %i \n", squared); 
break; 
case 4: 
     if (number == 0) 
     printf("You have not entered a number\n"); 
     else if 
     (number % 2 ==0) 
     printf("Your number squared is even!\n"); 

     else 

     printf("Your number is odd!\n"); 

break; 

case 5: 
     printf("Goodbye!!!!\n"); 
system("pause"); 
break; 

default: 
     printf("Was not 1 through 5\n"); 
break; 
}// end switch and functions 








} while (choice!=5); 


} //end function 
+0

Он работает здесь: http://ideone.com/TagkqI –

+0

@karma_geek: неопределенное поведение может якобы работать некоторое время ... в ответах все еще есть реальная проблема. –

+0

@ Сессия: вы должны проверить успех при вызове 'scanf', например. 'if (scanf ("% I ", & number)! = 1) {fprintf (stderr," ваш вход недействительный номер \ n "); выход (1); } ', иначе кто-то печатает, например. буквы или знаки препинания не будут предупреждены. –

ответ

2

GIGO aka Мусор в мусоре. (Или более точно «неопределенное поведение»)

Вы никогда не заходило number (поэтому он имеет некоторое случайное значение), но ваши if заявления проверить number, как если бы он имел значение по умолчанию < 0. заходящего number «s по умолчанию, как Try это: int number = -1;

+0

Тест на самом деле для 'number <0', поэтому установка' 0' не будет работать (нужно, например, '-1' или' INT_MIN'), но в любом случае получите мой голос за указание общей проблемы. –

+0

Я что-то пропустил? когда я определяю переменную int number = -1; он по-прежнему делает то же самое. Даже переключая операторы if на (number == 0), затем определяя int number = 0; по-прежнему вызывает ту же ошибку. Мне жаль, что я чувствую, что мне не хватает чего-то действительно очевидного, я очень новичок в программировании. – Session

+0

Вам нужно показать отредактированный код с помощью 'int number = -1;' Попробуйте напечатать значение 'number' перед вашим' switch'. – John3136

2

C не инициализирует переменные, поэтому вам придется это делать. Если yo не инициализируется, вы будете переменными, которые будут равны всем местам памяти, поэтому они непредсказуемы. В вашем случае вы должны инициализировать номер с отрицательным значением, чтобы сначала ввести число. int number = -1;

2

Установите значение по умолчанию для числа, например -1 или любое отрицательное число. Тогда ваш код будет работать нормально.

Смежные вопросы