Я пишу простую программу калькулятора налогов для школьного проекта и сталкиваюсь с некоторыми проблемами с проверкой входных данных и мне нужна помощь. Мне нужно выполнить проверку, чтобы убедиться, что входные данные являются целыми числами или с плавающей точкой. Входные данные не могут содержать символы любого вида, а входные данные не могут содержать отрицательное целое число или число с плавающей запятой. Код, который у меня есть, указан ниже.
Я пробовал различные операторы while и if. Я искал по всему интернету, и я не нашел элегантный способ сделать это. Кроме того, по какой-либо причине, если я введу символ с помощью оператора while в моей текущей версии кода, он зациклится навсегда и никогда не предложит мне ввести новый номер.
#include <stdio.h>
int main()
{
float fPrice;
float fTax=0.0f;
float fFinalPrice;
int dividend;
int iPrice;
//int iFinalPrice;
float fInput;
int x;
double dTax;
dividend = 100;
printf("Enter sales tax rate as a whole number (e.g. 1, 6, 8, 10): ");
scanf("%lf", &dTax);
while((dTax < 1.0) && (dTax != (int)dTax))
{
printf("ERROR: Invalid input received.\n");
printf("Enter sales tax rate as a whole number (e.g. 1, 6, 8, 10): ");
scanf("%lf", &dTax);
}
fTax = dTax/dividend;
//printf("\nThe converted Tax Rate: %.2f\n", fTax);
printf("Enter cost (e.g. 10.43 or 10: ");
scanf("%f", &fPrice); // set price input to a float var.
while((fPrice < 1.0) && (fPrice != (int)fPrice))
{
printf("ERROR: Invalid input received.\n");
printf("Enter cost (e.g. 10.43 or 10: ");
scanf("%ff", &fPrice);
}
iPrice=fPrice; // take the float and assign it to the int var. The int var will always be a whole number regardless of what value is passed in.
if(iPrice==fPrice) // look at int var and if == to float var then the value can be considered to be an integer.
{
fFinalPrice = iPrice + (iPrice*fTax);
printf("Price with tax is $%.2f", fFinalPrice);
}
else // price is a float
{
fFinalPrice = fPrice + (fPrice*fTax);
printf("Price with tax is $%.2f", fFinalPrice);
}
return 0;
}