2015-09-16 2 views
0

Может ли кто-нибудь помочь мне с моим кодом? Моя программа не заканчивается. Выбрав бренд, он должен прекратиться, но он будет навсегда.Завершить программу в C

#include<stdio.h> 
int main (void) 
{ 
    int number,count=0 ; 

    while (count<3) 
    { 
     printf("Menu:\n"); 
     printf("1.Proace\n"); 
     printf("2.Yonex\n"); 
     printf("3.Reebook\n"); 
     printf("0.Exit\n"); 
     printf("Enter your selection:"); 
     scanf("%d",&number); 

     switch (number) 
     { 
     case 0: 
      printf("exit.\n"); 
      break; 
     case 1: 
      printf("You have selected proace.\n"); 
      break; 
     case 2: 
      printf("You have selected yonex.\n"); 
      break; 
     case 3: 
      printf("You have selected reebook.\n"); 
      break; 

     default: 
      printf("Please try again.\n"); 
      exit(0); 
     } 
    } 
    return 0; 
} 
+5

Вы увеличиваете 'count' в любом месте? – Downvoter

+0

Компиляция со всеми предупреждениями и информацией об отладке (например, 'gcc -Wall -Wextra -g' с [GCC] (http://gcc.gnu.org/). Затем ** используйте отладчик ** (' gdb') –

+0

Мне нравится, как вам нужно выбрать Exit до трех раз, даже если остальная часть вашей логики правильная ... –

ответ

0

Заменить while (count<3) с булевым, bool loop=true; с последующим while (loop). А затем внутри переключателя, когда вы хотите выйти, не вызывайте функцию выхода, а просто установите loop=false;.

0

Ваш break в switch() выходит из switch(), но не выходит из while().

Если вы введете 0, default: случай не будет выполнен. Действительно ли это то, что вы хотели?

+0

Я хочу выйти, если я наберу либо 1,2,3,0 числа, кроме этого числа, он снова повторит запрос. –

+0

Ваш код завершается только если вы наберете что-то отличное от {1; 2; 3; 0} (я не принимаю во внимание проблемы с 'scanf()'). В дополнение к другим ответам, которые показывают вам другой способ написания того, что вы хотите, я настаивайте на том, что вам следует еще раз взглянуть на то, как работает «break». http://stackoverflow.com/questions/2565659/- хорошее начало. –

0
int number=4 ; 

while (number > 3) 

и вы можете удалить count, который я не могу смотреть в настоящее время используется в любом месте

На самом деле, следующая структура может быть лучше, так как вам не придется ставить произвольное число в сравнении :

int number; 
do { 
    // the thing 
} while(number > 3); 

В этом случае он определяет, следует ли продолжать цикл ПОСЛЕ первого выполнения, а не перед ним. Таким образом, в режиме do-while он ВСЕГДА выполнит команду do ONCE, прежде чем условие может сломать ее, даже если условие является ложным для начала!

1

Я думаю, вы недооцениваете случай defaultswitch: он выполняется только в том случае, если номер не 0,1,2,3. Если вы хотите, чтобы выйти каждый раз, когда на выход (0) для каждого case 0 1 2 3

#include<stdio.h> 
int main (void) 
{ 
    int number,count=0 ; 

    while (count<3) 
    { 
     printf("Menu:\n"); 
     printf("1.Proace\n"); 
     printf("2.Yonex\n"); 
     printf("3.Reebook\n"); 
     printf("0.Exit\n"); 
     printf("Enter your selection:"); 
     scanf("%d",&number); 

     switch (number) 
     { 
     case 0: 
      printf("exit.\n"); 
      exit(0); 
      break; 
     case 1: 
      printf("You have selected proace.\n"); 
      exit(0); 
      break; 
     case 2: 
      printf("You have selected yonex.\n"); 
      exit(0); 
      break; 
     case 3: 
      printf("You have selected reebook.\n"); 
      exit(0); 
      break; 

     default: 
      printf("Please try again.\n"); 
     } 
    } 
    return 0; 
} 

BTW лучший код должен быть

#include<stdio.h> 
int main (void) 
{ 
    int number; 
    bool canExit = false; 

    while (canExit == false) 
    { 
     canExit = true; 

     printf("Menu:\n"); 
     printf("1.Proace\n"); 
     printf("2.Yonex\n"); 
     printf("3.Reebook\n"); 
     printf("0.Exit\n"); 
     printf("Enter your selection:"); 
     scanf("%d",&number); 

     switch (number) 
     { 
     case 0: 
      printf("exit.\n"); 
      break; 
     case 1: 
      printf("You have selected proace.\n"); 
      break; 
     case 2: 
      printf("You have selected yonex.\n"); 
      break; 
     case 3: 
      printf("You have selected reebook.\n"); 
      break; 

     default: 
      printf("Please try again.\n"); 
      canExit = false; 
     } 
    } 
    return 0; 
} 
+0

'exit' не является хорошим именем переменной, так как он сталкивается со стандартным именем функции. – Lundin

+0

@ Lundin Я отредактировал – LPs

0

Я бы заменить выключатель с:

char* brand[] = { "proace", "yonex", "reebook" }; 
do{ 
    if(number == 0) 
     printf("exit.\n"); 
    else if(number <= 3) 
     printf("You have selected %s.\n", brand[number]); 
    else 
     printf("Please try again"); 
}while(number > 3); 

Инкапсулируйте его в цикл do-while с номером состояния> 3, и он будет зацикливаться до тех пор, пока пользователь не выберет 0-3. В этом случае exit(0) не требуется.

-3

Здравствуйте, вы можете выйти из своей программы, включив в заголовок файл заголовка #include.

Затем вы можете использовать команду выхода()

например: -

#inlcude<process.h> 
#include<studio.h> 
into opt; 
printf(" enter o "); 
scant(" %d",&opt); 
switch(opt) 
case 0: printf(" exiting the program"); 
      getch(); 
      exit(); 
+0

В 'gcc',' exit() 'является встроенной функцией, поэтому вам не нужно включать какой-либо файл заголовка, но затем' gcc' будет вызывать предупреждение о объявлении типа 'exit () '. Поэтому, чтобы скомпилировать код под любым возможным компилятором, совместимым с стандартом C, вы должны включить 'stdlib.h', который имеет объявление' exit() ' – rootkea

+0

Кстати, что это за' studio.g'? Вы имели в виду 'stdio'? – rootkea

+0

@rootkea его опечатка, я имею в виду его проблема с автоматической коррекцией. Да, должен быть включен для использования exit(). –

0

Вы не обновляя переменную счетчика, именно поэтому она не выходя. Для выхода из цикла в то время как счетчик должен быть больше или равен 3.

0

Пока вы будете давать вход 0, 1, 2 or 3 вы никогда не достигнете default, который имеет exit() и, таким образом, программа будет продолжать работать, как мы установили while условный как (count < 3) т.е. 0 < 3 который всегда прав. Поэтому нет возможности выйти из программы на while условно.Единственный шанс завершить программу - от default.

Так что если вы дадите ввод ничего, кроме 0, 1, 2 or 3, вы достигнете default, который вызывается exit() и, таким образом, приведет к завершению программы.

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