Problem z funkcja 'switch'

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

int number1; 
int number2; 
int operation;

int main()
{ 
  printf("Enter number 1\n");
  scanf("%d", &number1);
  
  printf("Enter operation\n");
  scanf("%s", &operation);
  
  printf("Enter number 2\n");
  scanf("%d", &number2);
  


  switch(operation)
  {
    case '+':
      printf("= %lf\n", number1+number2);
      break;

    case '-':
      printf("= %lf\n", number1-number2);
      break;

    case '*':
      printf("Result = %lf\n", number1*number2);
      break;

    case '/':
      if(number2 == 0)
        printf("\n\n\aDivision by zero error!\n");
      else
        printf("= %lf\n", number1/number2);
      break;

    case '%':
      if((long)number2 == 0)
        printf("\n\n\aDivision by zero error!\n");
      else
        printf("= %ld\n", (long)number1%(long)number2);
      break;

    default:
      printf("\n\n\a Illegal operation!\n");
  }
  system("PAUSE");	
 
}

Wygląda to następująco w praktyce: wpisuję liczbę, znak, drugą liczbę - lecz nie dostaję poprawnego wyniku. Jest to problem z funkcją czy może jak przypuszczam - ze zmiennymi? I jak to mogę poprawić?

0
scanf("%s", &operation);

Also, być może po wykonaniu scanf, w buforze zostaje jeszcze znak nowej linii (entera).

0

Problem jest w twoim zrozumieniu jak działa scanf!
Pakujesz c-stringa pod wartość int, więc w operation masz wartości zupełnie bezsensu. Moja rada włącz kompilatorowi flagę -Wall wtedy będzie się pluł jak będziesz robił takie błędy.
powinno być (masz nawet więcej błędów):

#include <stdio.h>
#include <stdlib.h>
#include <math.h> 
 
int number1; 
int number2; 
char operation[20];
 
int main()
{ 
  printf("Enter number 1\n");
  scanf("%d", &number1);
 
  printf("Enter operation\n");
  scanf("%s", operation);
 
  printf("Enter number 2\n");
  scanf("%d", &number2);

  switch(operation[0])
  {
    case '+':
      printf("= %d\n", number1+number2);
      break;
 
    case '-':
      printf("= %d\n", number1-number2);
      break;
 
    case '*':
      printf("Result = %d\n", number1*number2);
      break;
 
    case '/':
      if(number2 == 0)
        printf("\n\n\aDivision by zero error!\n");
      else
        printf("= %d\n", number1/number2);
      break;
 
    case '%':
      if((long)number2 == 0)
        printf("\n\n\aDivision by zero error!\n");
      else
        printf("= %d\n", number1%number2);
      break;
 
    default:
      printf("\n\n\a Illegal operation!\n");
  }
  system("PAUSE");        
 
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1