2015-07-09 3 views
-6

Я также попытался использовать код ASCII, заменив %d на %c в `scanf(). но затем он показывает - Add = 5 (Если я ставлю на вход 5 & 6 с 65 ASCII код)Какая ошибка в этом программном коде?

#include <stdio.h> 
#include <conio.h> 

void main() 
{ 
    int num1,num2,res; 
    char ch; 
    printf("Enter two numbers"); 
    scanf("%d%d",&num1,&num2); 
    printf("Enter the operator from the following\n\nA for +\nB for -\nC for*\nD for /\n"); 
    scanf("%c",&ch); 

    if(ch=='A') 
    { 
     res=num1+num2; 
     printf("Add=%d",res); 
    } 
    else if(ch=='B') 
    { 
     res=num1-num2; 
     printf("Sub=%d",res); 
    } 
    else if(ch=='C') 
    { 
     res=num1*num2; 
     printf("Mul=%d",res); 
    } 
    else if(ch=='D') 
    { 
     res=num1/num2; 
     printf("Div=%d",res); 
    } 
    else 
    { 
     printf("Invalid Operator"); 
    } 
    getch(); 
} 

Выход:

Here's the Output

Любая помощь?

+3

Знаете ли вы, что такое «отступы»? –

+0

Как вы вводите «65 ASCII-код»? –

+0

Вещи, которые вы можете включить в вопрос: что именно вы вводите? Какой результат вы видите? Какой результат вы ожидали? –

ответ

0

Я бы а написать более полезную и правильную версию этого кода

#include <stdio.h> 

int main() { 
    int n1, n2, ans; 
    char op; 
    scanf("%d %c %d", &n1, &op, &n2); 
    switch (op) { 
    case '+': 
     ans = n1 + n2; 
     break; 
    case '-': 
     ans = n1 - n2; 
     break; 
    case '*': 
     ans = n1 * n2; 
     break; 
    case '/': 
     if (n2) { 
      ans = n1/n2; 
      break; 
     } 
    default: 
     fprintf(stderr, "Invalid Input\n"); 
     return 1; 
    } 
    printf("%d", ans); 
    return 0; 
} 

Входной

1 + 2 
4-3 

Выход

3 
1 

Смотреть http://ideone.com/y2nnWF демо.

+0

Спасибо! Тот, который вы пишете, определенно проще, чем мой. –

1

Вы сталкиваетесь, к сожалению, с той же проблемой, с которой сталкивается каждый начинающий программист C: scanf отстой. Когда вы позвонили

scanf("%d%d",&num1,&num2); 

он правильно прочитал два введенных вами номера. Но после того, как вы набрали два числа, вы, вероятно, нажмете RETURN. И первый звонок scanf сделал не прочитал, что символ возврата. Таким образом, он все еще сидит там во входном буфере, и когда вы позже вызываете scanf("%c",&ch), на самом деле это символ новой строки, который читается, а не A или B, которые вы хотели прочитать.

, не меняя свою программу на всех, вы можете попробовать ввести что-то вроде

12 34A 

в ответ на первый запрос. Первый scanf не будет читать его, так что теперь это будет сидеть там в буфере ввода, ожидая вашего второго звонка scanf, чтобы его найти.

Это обходное решение, а не исправление. Чтобы исправить это, вы могли бы сделать то, что предложил @Ediac в своем ответе.

(Лучше исправить, вероятно, будет не использовать scanf на всех, но, к сожалению, что включает в себя обучение больше о I/O, чем книги или инструктора, вероятно, хотел, чтобы попасть в право на первый.)

+0

omG bro! так было мое кодирование неправильно? Можете ли вы объяснить, что проблема scanf в описании, пожалуйста? –

+0

@AshishMasih: Читайте мой ответ еще раз, объяснение там. :-) Ваш код был «неправильным» в том, что вы не спрашивали 'scanf' делать что угодно вы хотели, но тогда почти невозможно заставить 'scanf' делать то, что вы хотите, ни для чего. (Я, я никогда не использую его.) –

+0

спасибо, брат! Хотелось бы, чтобы я уже знал эту проблему scanf. –

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