#c #input
#c #ввод
Вопрос:
У меня возникли небольшие проблемы с фрагментом кода, и я хотел спросить, могу ли я получить некоторую помощь. По сути, я создаю программу, которая будет делить два числа, введенные пользователем, и я хочу распечатать сообщение, если одно из введенных чисел равно 0. Однако эта часть кода работает некорректно. Ниже приведен код, который у меня есть.
int main()
{
float n1 = 0.0, n2 = 0.0, quotent = 0.0;
int firstNumberRead = 0;
int secondNumberRead = 0;
firstNumberRead = scanf("%f", amp;n1);
secondNumberRead = scanf("%f", amp;n2);
//check that the attempt to read the number was successful
if (firstNumberRead amp;amp; secondNumberRead == 1)
{
//divide the first number by the second number
quotent = (n1 / n2);
//print quotent
printf("%f", quotent);enter code here
}
else if (firstNumberRead || secondNumberRead == 0)
{
printf("invalid input - divide by zero is not allowed");
}
else
{
printf("invalid input");
}
scanf("%f", amp;n1);
return (0);
}
Комментарии:
1.
firstNumberRead amp;amp; secondNumberRead == 1
скорее всего, это не то, что вы на самом деле намереваетесь. Посмотрите, как условия работают в C .
Ответ №1:
С этим кодом связано множество проблем.
if (firstNumberRead amp;amp; secondNumberRead == 1)
Вероятно, вы ошибаетесь в отношении того, как условия работают в C , проверьте свой учебник для подробного объяснения. Вы, скорее всего, хотели сказать
if(firstNumberRead == 1 amp;amp; secondNumberRead == 1)
Это только проверит, что обоим scanf
вызовам удалось прочитать значение. Затем вам нужно проверить фактическое значение внутри if
выражения.
Другими проблемами была проверка неправильных переменных 0
в знаменателе и числителе (вы проверили firstNumberRead
и secondNumberRead
снова. Вы должны проверить n1
и n2
вместо этого:
if (n1 == 0 || n2 == 0)
Обычно использовать operator ==
для переменных с плавающей запятой — плохая идея, но вы можете возразить, что это имеет смысл для знаменателя (все остальные состояния являются законными с точки зрения арифметики). Но вы, возможно, захотите заглянуть внутрь std::abs
и проверить, не меньше ли он какого-нибудь эпсилона. Например:
if (abs(n1) < 0.001 || abs(n2) < 0.001)
Наконец, вы, вероятно, хотите чего-то подобного:
if (firstNumberRead == 1 amp;amp; secondNumberRead == 1)
{
if (n1 == 0 || n2 == 0)
{
printf("invalid input - divide by zero is not allowed");
}
else
{
//divide the first number by the second number
quotent = (n1 / n2);
//print quotent
printf("%f", quotent);
}
}
else
{
printf("invalid input");
}
Комментарии:
1. @SeanCampbell Пожалуйста, примите ответ, если он решит вашу проблему. Вы можете сделать это, нажав на значок галочки под голосами за этот ответ.