Во вход функции я пытался выполнить проверку ввода, которая будет принимать только входные данные из выбранных вариантов. Я попытался использовать только переменную opt, чтобы получить значения из scanf, но когда я сравниваю с if, это дает ошибку, говорящую о сравнении указателя на другой тип.Как назначить значение из char в указатель?
С помощью этого кода мне удалось удалить эту ошибку, и программа теперь запускается, но программа заканчивается после ввода ввода. Кто-нибудь может мне с этим помочь? Спасибо :)
#include <stdio.h>
#include <ctype.h>
int add(int n1, int n2);
int subtract(int n1, int n2);
int multiply(int n1, int n2);
int divide(int n1, int n2);
void input(int *n1, int *n2, char *opt);
int main(void)
{
int n1, n2, ret;
char opt;
start:
input(&n1, &n2, &opt);
switch(opt)
{
case '1':
ret = add(n1, n2);
printf("The sum is %d\n", ret);
break;
case '2':
ret = subtract(n1, n2);
printf("The difference is %d\n", ret);
break;
case '3':
ret = multiply(n1, n2);
printf("The product is %d\n", ret);
break;
case '4':
ret = divide(n1, n2);
printf("The quotient is %d\n", ret);
break;
case 'R':
goto start;
break;
case 'E':
printf("Goodbye!\n");
return 0;
break;
}
return 0;
}
void input(int *n1, int *n2, char *opt)
{
int valid;
char choice;
printf("Enter first number: \n");
scanf("%d", n1);
printf("Enter second number: \n");
scanf("%d", n2);
getchar();
valid = 0;
while(valid == 0)
{
printf("Addition -> 1\nSubtraction -> 2\nMultiplication -> 3\nDivision -> 4\nReset -> R\nExit -> E\n");
if (scanf("%c", &choice) == ('1' || '2' || '3' || '4' || 'R' || 'E'))
{
valid = 1;
}
else
{
printf("Invalid input!\n");
}
}
opt = &choice;
}
int add(n1, n2)
{
int result;
result = (n1+n2);
return result;
}
int subtract(n1, n2)
{
int result;
result = (n1-n2);
return result;
}
int divide(n1, n2)
{
int result;
result = (n1/n2);
return result;
}
multiply(n1, n2)
{
int result;
result = (n1*n2);
return result;
}
Вам может понадобиться, чтобы прочитать о том, что [ 'scanf'] (http://en.cppreference.com/w/c/io/fscanf) фактически возвращает. Затем вам нужно прочитать, как работают условия в C. –
afaik, scanf здесь сканирует вход пользователя. Вот почему я сравнил сканированное значение с действительными входами. Что-то не так с этим? – fixotherm
Да, и вы знаете, почему, если вы следовали ссылке в моем предыдущем комментарии и прочитали ссылку. –