Я занимаюсь лабораторией для вводного класса программированияПроверка числового ввода в C
Я должен убедиться, что введено целое число. Я думал, что это будет сделано, но когда я поставлю письмо, оно повторяется в бесконечном цикле.
Я нашел это решение в другом посте
int num;
char term;
if (scanf("%d%c", &num, &term) != 2 || term != '\n')
printf("failure\n");
else
printf("valid integer followed by enter key\n");
Но им не уверен, что я сделал неправильно. Почему он не работает в моем коде?
#include <stdio.h>
int main(void)
{
int oneVar;
char term;
double numOne;
double numTwo;
double sum;
double dif;
double quo;
double mult;
int checker = 1;
do
{
printf("Please choose one of the following:\n""1) Add\n""2) Subtract\n""3) Divide\n""4) Multiply\n""5) Quit\n");
if (scanf("%d%c" , &oneVar ,&term) != 2 || term != '\n')
{
printf ("This is not valid input\n\n");
checker = 1;
}
else if (oneVar == 5)
{
printf("Thank you. Goodbye.\n");
checker = 0;
}
else if (oneVar != 1 && oneVar !=2 && oneVar != 3 && oneVar != 4)
{
printf("This is not a valid input\n\n");
checker = 1;
}
else
{
printf("Please enter the first number:\n");
if (scanf("%lf%c" , &numOne ,&term) != 2 || term != '\n')
{
printf ("This is not valid input\n\n");
checker = 1;
}
printf("Please enter the second number:\n");
if (scanf("%lf%c" , &numTwo ,&term) != 2 || term != '\n')
{
printf ("This is not valid input\n\n");
checker = 1;
}
else if (oneVar == 1)
{
sum = numOne + numTwo;
printf("The sum is: %.2lf\n" ,sum);
checker = 0;
}
else if (oneVar == 2)
{
dif = numOne - numTwo;
printf("The difference is: %.2lf\n" ,dif);
checker = 0;
}
else if (oneVar == 3)
{
quo = numOne/numTwo;
printf("The quotient is: %.2lf\n" ,quo);
checker = 0;
}
else if (oneVar == 4)
{
mult = numOne * numTwo;
printf("The product is: %.2lf\n" ,mult);
checker = 0;
}
else if (oneVar == 5)
{
printf("Thank you. Goodbye.\n");
checker = 0;
}
}
} while (checker == 1);
return(0);
}
Мой профессор отправил это им не уверен, как это помогает, но я думал, что это может помочь кому-то Чтобы убедиться, что пользователь-вход число является целым числом, вы можете использовать понятие литья. Кастинг - это способ сказать C обрабатывать переменную, как если бы она была переменной другого типа.
так, если у меня есть что-то вроде этого:
double myDouble;
myDouble = 5.43;
printf ("%d", (int) myDouble);
Он сообщит C печатать myDouble, но относиться к нему как целое. Будут напечатаны только 5, и вы не получите ошибок несоответствия типа. Вы можете использовать кастинг, чтобы проверить, является ли входной номер целым, путем сравнения ввода с (int) литой числа. Что-то вроде этого должно работать:
if(inputNum == (int) inputNum)
Вы все равно получите 1.0 и 2.0, проходящие как допустимые числа, но на данный момент это нормально.
Вот что добавить в ваше образование: научитесь думать как программист. Высказывание «это сходит с ума» абсолютно ничего не говорит о том, что именно происходит.Мало того, что вы можете понять и сформулировать результат, который вы получаете, намного облегчают людям, находящимся в stackoverflow, чтобы помочь вам, но также помогают разработчикам аналитических навыков. –
Вы используете unix или MS Windows? В MS Windows это не так работает – Vorsprung
Я сказал это, потому что я не знал, как это описать, но в основном он повторяется снова и снова в бесконечном цикле. Я использую малиновый pi с пользовательской ОС для своей программы. Как я уже сказал, я новичок, извините, если мой язык не в порядке, но я делаю все возможное! надеюсь, это уточнит мой вопрос. –