#c #if-statement #while-loop #temperature
#c #оператор if #цикл while #температура
Вопрос:
Я работаю над программой, в которой я должен использовать логические операторы в if / else, чтобы получить от пользователя значение температуры и символ градуса и распечатать состояние (лед, жидкость, пар), в котором находится вода.
Пример ввода и вывода:
Enter temperature, such as 31 F: 101c
Water is steam at 101c.
Мой код размещен ниже. Кажется, что это должно сработать, но я думаю, что я неправильно выполняю ввод и, следовательно, цикл не вводится. Не уверен, как это исправить.
#include <stdio.h>
int main(void)
{
double temp;
char CorF;
printf("Please enter a temperature, such as 31 F:");
while (scanf_s("%lf %c", amp;temp, amp;CorF, 2) == 1)
{
if (temp <= 32 amp;amp; CorF == 'F')
{
printf("Water is ice at %lf %c.n", temp, CorF);
}
else if (temp >= 212 amp;amp; CorF == 'F')
{
printf("Water is steam at %lf %c.n", temp, CorF);
}
else if (temp > 32 amp;amp; temp < 212 amp;amp; CorF == 'F')
{
printf("Water is liquid at %lf %c.n", temp, CorF);
}
else if (temp <= 0 amp;amp; CorF == 'C')
{
printf("Water is ice at %lf %c.n", temp, CorF);
}
else if (temp >= 100 amp;amp; CorF == 'C')
{
printf("Water is steam at %lf %c.n", temp, CorF);
}
else if (temp < 0 amp;amp; temp > 100 amp;amp; CorF == 'C')
{
printf("Water is liquid at %lf %c", temp, CorF);
}
else
{
// blank line!
}
}
return 0;
}
Комментарии:
1.
scanf
возвращает количество успешных преобразований, поэтому хорошее возвращаемое значение в вашем случае равно 2. Кроме того, если пользователь вводит101c
, ни одно из условий не будет выполнено, потому'c'
что это не то же самое, что'C'
2.
scanf_s("%lf %c", amp;temp, amp;CorF, 2) == 1
—>scanf_s("%lf %c", amp;temp, amp;CorF, 1) == 2
3.
temp < 0 amp;amp; temp > 100
—>temp > 0 amp;amp; temp < 100
4. Когда вы определяете, что «мой цикл не вводится», вместо того, чтобы тратить время на публикацию вопроса здесь, спросите себя «почему это так?»… Ответ, если вы не уверены, — поэкспериментировать. Спросите: «Интересно, какое значение
sscanf_s
возвращается». Используйте отладчик или измените код для сохранения и отображения результата. Этот базовый навык исследования и любознательности избавит вас от необходимости задавать 99% вопросов, которые вы могли бы задать на этом сайте.
Ответ №1:
В вашем коде много ошибок. Пока это цикл, он используется для зацикливания. Когда вы проверяете его с помощью scanf_s, он будет проверять значение при вводе каждый раз в цикле. Вместо использования while вы должны использовать оператор if .
#include<stdio.h>
int main(void)
{
double temp;
char CorF;
printf("Please enter a temperature, such as 31 F:");
int i=scanf("%lf %c", amp;temp, amp;CorF);
if(i==2)
{
if (temp <= 32 amp;amp; CorF == 'F')
{
printf("Water is ice at %lf %c.n", temp, CorF);
}
else if (temp >= 212 amp;amp; CorF == 'F')
{
printf("Water is steam at %lf %c.n", temp, CorF);
}
else if (temp > 32 amp;amp; temp < 212 amp;amp; CorF == 'F')
{
printf("Water is liquid at %lf %c.n", temp, CorF);
}
else if (temp <= 0 amp;amp; CorF == 'C')
{
printf("Water is ice at %lf %c.n", temp, CorF);
}
else if (temp >= 100 amp;amp; CorF == 'C')
{
printf("Water is steam at %lf %c.n", temp, CorF);
}
else if (temp < 0 amp;amp; temp > 100 amp;amp; CorF == 'C')
{
printf("Water is liquid at %lf %c", temp, CorF);
}
else
{
; // blank line!
}
}
return 0;
}
Вы можете использовать этот код.
Из scanf: при успешном выполнении функция возвращает количество успешно прочитанных элементов. Это количество может соответствовать ожидаемому количеству показаний или меньше, даже нулю, если произойдет сбой сопоставления. В случае сбоя ввода до того, как какие-либо данные могут быть успешно прочитаны, возвращается EOF.