Поэтому я пытаюсь убедиться, что пользователь вводит переменную в определенном наборе условий для использования в более поздних вычислениях. А именно, они не могут превышать vmax, быть не ниже нуля и не быть строкой.
Вот что у меня есть.
do
{
scanf("%f", &vkmh);
if (vkmh <= vmax)
{
}
else if (vkmh < 0)
{
printf("Error, speed must be positive.\n");
}
else if (vkmh > vmax)
{
printf("Error, the max speed of this vehicle is listed as %.fkm/h.\nIt cannot exceed that value. Please enter a value under %.f.\n", vmax, vmax);
}
else if (vkm != getchar())
{
printf("Error in input. Please only use numbers\n");
}
}
while(vkmh > vmax || vkmh < 0 || vkm != getchar());
Теоретически допустимые значения возвращают действительный ответ, а значение выше vmax возвращает недопустимый ответ и запрашивает повторный вход пользователя. Но отрицание или строка ничего не возвращает.
Любые идеи о том, как я могу заставить это работать?
if (vkmh <= vmax) { X } else if (vkmh < 0) { Y }
никогда не выполнит ветвьY
, когдаvmax >= 0
. - person Marian   schedule 26.03.2016scanf()
всегда проверяйте возвращаемое значение (а не значение параметра), чтобы убедиться, что операция прошла успешно. Примечание: если пользователь ввел в качестве первого символа не цифру, возвращаемое значение из отправленного вызоваscanf()
будет равно 0. - person user3629249   schedule 27.03.2016vkmh < 0
также меньшеvmax
, поэтому задаются неправильные вопросы (или, по крайней мере, в неправильном порядке). - person user3629249   schedule 27.03.2016