2014-10-14 4 views
-1

Всякий раз, когда пользователь вводит 2 целых числа и выбирает что-либо из +, -, *, /, программа запускает оператор switch. Проблема заключается в том, что оператор switch делает первое целое число 0 и дает результат на основе этого ,Оператор switch не работает в C

Предположим, что 2 целых числа равны 4 и 8. Выберите другой вариант .Программа дает результат, подобный этому 0 + 8 = 8. Аналогично другим вариантам.

Вот код:

#include <stdio.h> 

int main() { 
    int x,y; 
    char choice; 

    printf("Enter the first Integer:\n"); 
    scanf("%d",&x); 
    printf("Enter the second Integer:\n"); 
    scanf("%d",&y); 

    printf("Choose the action you want to perform\n") 
    scanf("%s",&choice); 
    switch(choice) { 
     case '+': 
      printf("\n%d + %d = %d",x,y,x+y); 
      break; 

     case '-': 
      printf("\n%d - %d = %d",x,y,x-y); 
      break; 

     case '*': 
      printf("\n%d * %d = %d",x,y,x*y); 
      break; 

     case '/': 
      if(y==0) { 
       printf("Undefined value\n"); 
      } else { 
       printf("\n%d/%d = %d",x,y,x/y); 
      } 
      break; 

     default: 
      printf("\n Enter something valid\n"); 
      break; 
    } 

    return 0; 
} 

Нужна ваша помощь в этом вопросе.

+3

'% s' означает строку, но' choice' является 'char' ... –

+1

Пожалуйста, не редактируйте правильный ответ в вопрос. Просто примите ответ, который помог вам решить проблему, щелкнув зеленую отметку. – pmr

ответ

6

Поскольку choice является char (не строка), то:

scanf("%s",&choice); 

должен быть

scanf(" %c",&choice); 

Обратите внимание на пробел перед %c - это полезно для очистки любых пробельных символов из входной буфер, например символ новой строки из предыдущего ввода.

Обратите внимание, что если вы включили предупреждения компилятора (например, gcc -Wall ...), то компилятор сразу указал бы на эту ошибку.

+1

Спасибо.Он работал. –

+0

@BLUEPIXY: хорошая точка - ответ обновлен. –

0

Ваша ошибка заключается в следующем:

char choice; 

scanf("%s",&choice); 

% S ссылки строка, но вы только поставить указатель на символ. Это приводит к тому, что ваши переменные в стеке (в специальном «y») будут перезаписаны остальной частью строки. В случае, если вы просто вводите один символ, первый символ сохраняется в «выборе», а байт с нулевым завершением перезаписывает некоторые части переменной «y» (рядом с ней в стеке).

Чтобы исправить это, используйте строку длиной 2, но LIMIT (!) Scanf - 1 символ !. Переключатель должен затем проверить первый символ строки ...

char choice[2]; 
[...] 
scanf("%s",&choice); 

switch(choice[0]) { 
[...] 
Смежные вопросы