2013-10-08 3 views
-1

Хорошо так что я должен создать программу погоды и когда я пытаюсь запустить код, я не получаю ошибки, но это будет просто напечатать «ввести начальную температуру» и «ввести конечную температуру». Однако он не позволит мне вводить данные для него. Есть ли что-то, что мне нужно изменить? Я знаю, что я не закончил код, но я просто хотел проверить исходные данные, прежде чем продолжить с остальной частью кода. Спасибо за помощь!Почему printf работает, но scanf нет?

#include <stdio.h> 
int main(int argc, char **argv) 
{ 
    float celcius, fahrenheit, kelvin, ending, interval; 
    int c, f, k, temp; 

    printf("which temperature is being input? (C,F,K) "); 
    scanf("%d", &temp); 
    if (temp == c) 
    { 
     printf("enter a starting temperature"); 
     scanf("%f", &celcius); 
     printf("enter an ending temperature"); 
     scanf("%f", &ending); 
     fahrenheit = celcius * 9/5 + 32; 
     kelvin = celcius + 273.15; 
    } 
    if (temp == f) 
    { 
     printf("enter a starting temperature"); 
     scanf("%f", &fahrenheit); 
     celcius = fahrenheit - 32 * 5/9; 
     kelvin = fahrenheit - 32 * 5/9 + 273.15; 
     printf("enter an ending temperature"); 
     scanf("%f", &ending); 
     if (temp == k) 
     { 
     } 
     printf("enter a starting temperature"); 
     scanf("%f", &kelvin); 
     fahrenheit = kelvin - 273 * 1.8 + 32; 
     celcius = kelvin - 273.15; 
     printf("enter an ending temperature"); 
     scanf("%f", &ending); 
    } 
} 
+0

я обычно ведущее пространство в * строках формата зсап(), по крайней мере после первого IIRC, в связи с «\ п» после того как пользователь вводит данные. – technosaurus

+0

проверка из 'функция fgets', вы можете использовать его вместо' scanf' – jev

ответ

3

Это:

if (temp == c) 

сравнивает вновь считанное значение в temp к неопределенному значению в неинициализированной переменной c. Это неопределенное поведение.

Вы, вероятно, имел в виду

if (temp == 'c') 

для сравнения с характером, но тогда вам также необходимо:

char temp; 
if (scanf("%c", &temp) == 1) 
{ 
    if (temp == 'c') 
    { 
    /* more code here */ 
    } 
} 

Обратите внимание, что проверка возвращаемого значения scanf() помогает сделать программу более устойчивой и позволит избежать дальнейшее использование неинициализированных значений (если scanf() ничего не читает, вы не должны читать целевую переменную, так как она не была записана в).

+0

The «с» наверняка помог и ваш код мне очень помог! однако почему вы добавили «== 1»? в чем смысл этого? Чтобы указать, верно ли это? –

+0

@ LewisM. - RTFM –

0
if (temp == c) 

Вы сравниваете темп с неинициализированным значением с

же для

if (temp == f) 

тогда каждая вещь будет работать нормально, чтобы сделать его более удобным для пользователя, поставить «\ п 'в Printf-х

как это,

printf("enter a starting temperature \n"); 
0

Здесь:

printf("which temperature is being input? (C,F,K) "); 
scanf("%d", &temp); 

вы просите символ для ввода, но тогда вы пытаетесь сканировать для int. Это отбросит все остальные ваши звонки scanf().

0

Ваша переменная температура объявлена ​​как целое. Действительно, scanf() хочет прочитать целое число (% d), но получает символ. Следовательно, вы читаете temp как символ. Кроме того, вы можете использовать

9.0/5.0 

вместо

9/5 

Кроме того, с помощью оператора коммутатора повысит читаемость.

Смежные вопросы