Вы не проверяете, вводите ли вы правильный номер для двух чисел, потому что вы не проверяете, возвращает ли scanf 1
Тест в , в то время как имеет '(' ')' неправильно и то же самое для , если
В , в то время как вы сравниваете и , прежде чем читать его, поэтому его использование является неопределенным поведением, , в то время как может циклически бесконечно
scanf для чтения операции не ограничивает количество прочитанных символов, вы можете записать из ans , и даже если введено правильное имя операции, вам некуда запомнить последний нулевой символ
Отсутствует конец программы, выполняющей операции
Предложение:
#include <stdio.h>
#include <string.h>
int main()
{
int num1;
int num2;
char ans[4];
printf("Enter first number: ");
if (scanf("%i", &num1) != 1) {
puts("invalid number");
return -1;
}
printf("Enter second number: ");
if (scanf("%i", &num2) != 1) {
puts("invalid number");
return -1;
}
for (;;) {
printf("What kind of operation do you want to make? Type Sum, Sub, Mul or Div: ");
if (scanf("%3s", ans) != 1)
/* EOF */
return -1;
if (!strcmp(ans,"Sum")) {
printf("%d+%d=%d\n", num1, num2, num1+num2);
return 0;
}
if (!strcmp(ans,"Sub")) {
printf("%d-%d=%d\n", num1, num2, num1-num2);
return 0;
}
if (!strcmp(ans,"Mul")) {
printf("%d*%d=%d\n", num1, num2, num1*num2);
return 0;
}
if (!strcmp(ans,"Div")) {
if (num2 == 0)
puts("cannot divide by 0");
else
printf("%d/%d=%d\n", num1, num2, num1/num2);
return 0;
}
puts("This command does not apply, please type the correct option");
}
}
Как вы можете видеть, у меня нет разделенного , в то время как только для проверки правильности операции ввода, потому что после этого вы снова тестируете, какова операция ввода для управления ею.
Компиляция и исполнения:
/tmp % gcc -pedantic -Wall -Wextra o.c
/tmp % ./a.out
Enter first number: 12
Enter second number: 34
What kind of operation do you want to make? Type Sum, Sub, Mul or Div: aze
This command does not apply, please type the correct option
What kind of operation do you want to make? Type Sum, Sub, Mul or Div: Sum
12+34=46
/tmp % ./a.out
Enter first number: aze
invalid number
/tmp %