2015-01-23 3 views
-2

Я хочу сделать простой калькулятор C только с условиями «IF» и «IF ELSE», и он не позволяет мне выбирать оператора («+, -, * или /»), просто появляется мое последнее условие if.C калькулятор if else

#include <stdio.h> 
int main(){ 
    printf("\tCalculadora\n\n"); 
    int num1, num2, total; 
    char oper; 
    printf("Introduza o primeiro numero: \n"); 
    scanf("%d", &num1); 
    printf("Introduza o segundo numero: \n"); 
    scanf("%d", &num2); 
    printf("Escolha a operacao que quer realizar!\n\n"); 
    scanf("%c", &oper); 
    if(oper == '+'){ 
     printf("O resultado e: %d", num1+num2); 
    } 
    else if(oper == '-'){ 
     printf("O resultado e: %d", num1-num2); 
    } 
    else if(oper == '*'){ 
     printf("O resultado e: %d", num1*num2); 
    } 
    else{ 
     printf("O resultado e: %d", num1/num2); 
    } 
    getchar(); 
    getchar(); 
} 
+3

Операция не имеет значения, которое, по вашему мнению, имеет значение. Попробуйте распечатать, что это такое, что приведет вас к решению. – ChrisInEdmonton

+0

как? например: printf («Escolha a operacao que quer realizar% c \ n \ n», oper); scanf ("% c", &oper); – Dimitri

+2

O_O НЕ МИГРАТ CRAP! – bjb568

ответ

3

Я избегаю scanf() и его двоюродных братьев. Вот версия вашего калькулятора, которая использует fgets() для ввода. Он также использует double для операндов.

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

#define ISIZE 100  // arbitrarily large 

int main(){ 
    double num1, num2; 
    int oper; 
    char inp[ISIZE+1] = ""; 
    printf("\tCalculadora\n\n"); 

    printf("Introduza o primeiro numero: ");   // 1st operand 
    fgets (inp, ISIZE, stdin); 
    num1 = atof (inp); 

    printf("Introduza o segundo numero: ");    // 2nd operand 
    fgets (inp, ISIZE, stdin); 
    num2 = atof (inp); 

    printf("Escolha a operacao que quer realizar! "); // operator 
    fgets (inp, ISIZE, stdin); 
    oper = inp[0]; 

    printf ("O resultado e: %f %c %f = ", num1, oper, num2); 

    switch (oper) { 
     case '+': printf("%f\n", num1+num2); break; 
     case '-': printf("%f\n", num1-num2); break; 
     case '*': printf("%f\n", num1*num2); break; 
     case '/': if (num2!=0) printf("%f\n", num1/num2); 
        else printf ("Divisão por zero!\n"); 
        break; 
     default: printf("Eu não sei o que operador\n"); 
    } 
    return 0; 
} 
+0

вы просто забыли 2 вещи. 1-й getchar(), в конце и в 2-м, как название говорит, что мне нужен калькулятор ac только с условием «если еще», но ваш ответ - написать – Dimitri

+0

@ Dimitri во-первых, вам не нужна очистка 'getchar()' при использовании 'fgets()'. Во-вторых, извините, я пропустил требование 'if .. else if ...', но, очевидно, вы это делаете следуйте инструкциям 'switch()' всегда. Всегда трудно ответить «Я не могу использовать XXX, потому что мой профессор говорит, что их не существует»! В юности я всегда получал очки, создавая ответы лучше, чем мои учителя хотели, а не потерять их, будучи ограниченным. –

1

Этот

scanf("%c", &oper); 

должен измениться

scanf(" %c", &oper); 

так вы препятствуете scanf() игнорировать '\n' оставленный предыдущими scanf() с.

0

Я также пытался применить свое знание C в простой калькулятор и наткнулся на вас вопросом. Чтобы уважать ваш запрос if ... else, я придумал это решение. Надеюсь, это поможет.

#include <stdio.h> 
void sayHello() { 
    printf("Hello\n"); } 
// to say hello to the user 
int add(int num1, int num2) { 
     num1 = num1 + num2; 
     return num1; 
} 

int minus(int num1, int num2) { 
     num1 = num1 - num2; 
     return num1; 
} 

int times(int num1, int num2) { 
     num1 = num1 * num2; 
     return num1; 
} 

int divide(int num1, int num2) { 
     num1 = num1/num2; 
     return num1; 
} 
// This is to declare the calculations 
void flush_input(){ 
    int ch; 
while ((ch = getchar()) != '\n' && ch != EOF); } 
// This is to flush the scanf values 
// Kudos to Huw Collingbourne, Udemy Teacher 
int main(int argc, char **argv) { 
     char c; 
     char f; 
     int n1; 
     int n2; 
     int total; 

     // n1 = ' '; 
     // n2 = ' '; 

sayHello(); 

do { 
    c = ' '; 
    printf("Insert the type of Calculation you want to make:\n"); 
    printf("A(d)dition, Subs(t)raction, Mu(l)tiplication, Di(v)ision: "); 
     c = getchar(); 
if(c == 'd') { 
    printf("\nInsert the first number:"); 
    scanf("%d", &n1); 
    printf("Insert the second number:"); 
    scanf("%d", &n2); 
    total = add(n1, n2); 
    printf("%d plus %d equals to %d\n", n1, n2, total); 
    flush_input(); } else { 
     if(c == 't') { 
     printf("insert the base number:"); 
     scanf("%d", &n1); 
     printf("Insert the subtracting number:"); 
     scanf("%d", &n2); 
     total = minus(n1, n2); 
     printf("The difference between %d and %d is %d\n", n1, n2, total); 
     flush_input(); } else { 
      if(c == 'l') { 
      printf("insert the first number:"); 
      scanf("%d", &n1); 
      printf("Insert second number:"); 
      scanf("%d", &n2); 
      total = times(n1, n2); 
      printf("%d times %d equals %d\n", n1, n2, total); 
      flush_input(); } else { 
       if(c == 'v') { 
       printf("insert the first number:"); 
       scanf("%d", &n1); 
       printf("Insert second number:"); 
       scanf("%d", &n2); 
       total = divide(n1, n2); 
       printf("%d divided by %d equals %d\n", n1, n2, total); 
       flush_input(); 
       } else { 
     printf("I couln't understand the instruction\n Reseting program\n"); 
       } 
      } 
     } 
    } 
     f = ' '; 
     printf("\nDo you wish to make another calculation?\n"); 

      printf("Choose (y)es or (n)ot: "); 
      f = getchar(); 
      // scanf("%c", &c); 
      getchar(); 
     } while(f != 'n'); 
     printf("\nThat's all folks!\n"); 
    return 0; 
}