2013-10-15 4 views
1

Извините, что не добавили весь код. Тупая ошибка с моей стороны.Математическое уравнение не будет считано. Почему это?

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

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

    if(temp == 'c') { 
     printf("enter a starting temperature"); 
     scanf("%f", &celcius); 
     fahrenheit=celcius*9/5+32; 
     kelvin=celcius+273.2; 
     printf("%f, %f, %f", celcius, fahrenheit, kelvin); 
     } 

     else if(temp == 'f') { 
     printf("Please enter a starting temperature"); 
     scanf("%f", &fahrenheit); 
     celcius=fahrenheit-32*5/9; 
     kelvin=fahrenheit-32*5/9+273.2; 
     printf("%f, %f, %f", celcius, fahrenheit, kelvin); 
      } 

      else if(temp == 'k') { 
      printf("enter a starting temperature"); 
       scanf("%f", &kelvin); 
       fahrenheit=kelvin-273*1.8+32; 
       celcius=kelvin-273.2; 
       printf("%f, %f, %f", celcius, fahrenheit, kelvin); 
      } 
} 

Так спрашивает, что температура входного и начальная температура, но почему это не вычисляя математические уравнения?

+0

Вам нужно сказать, что произойдет. – occulus

+0

c, f, k .. откуда? – user2864740

+0

Что такое 'c',' f' и 'k'? Возможно, вы хотели напечатать 'celcius',' fahrenheit' и 'kelvin'? – Kninnug

ответ

4

Он вычисляет математические уравнения

fahrenheit=celcius*9/5+32; 
kelvin=celcius+273.15; 

но вы не печатаете его.
Попробуйте

printf("%f, %f, %f", celcius, fahrenheit, kelvin); 

И не забудьте изменить scanf("%s", &temp); к

scanf(" %c", &temp); 
temp = tolower(temp); // include <ctype.h> header 

или лучше разместить

int c; 
while ((c = getchar()) != `\n` && c != EOF); 

после scanf(" %c", &temp);. Это съест весь символ, отличный от первого символа ввода.

Согласно комментарию OP;

Как это сделать, чтобы название температуры отображалось поверх температуры?

printf("celcius \tfahrenheit \tkelvin); 
printf("%5f\t%5f\t%5f", celcius, fahrenheit, kelvin); 
+0

Да, это правильно. Очень жаль. Новое для программирования и этого веб-сайта, поэтому я сейчас чувствую себя идиотом. Спасибо! Также быстрый вопрос. Как это сделать, чтобы название температуры отображалось поверх температуры? –

+0

@LewisM .; Обновлен мой ответ. – haccks

+0

Большое спасибо @haccks Это был ответ, который мне нужен! –

1

Вы не показать, как вы определили вашу переменную temp, но это очень опасно для чтения строки таким образом. Если temp является символом, то, указывая на его адрес и рассматривая его как строку, задается проблема. Наверняка у вас будет '\0', записанный на место сразу после temp, и если пользователь вводит более одного символа, то ущерб, который они могут сделать, еще больше.

Вы можете прочитать один символ с getc вызова:

temp = getc(stdin); 

Я бы рекомендовал, что вы убедитесь, что это нижний регистр - так как вы сравниваете с c:

temp = lower(getc(stdin)); 

Тогда, очевидно, , когда вы распечатываете переменную, вы должны распечатать тот, который вы вычислили. Вы вычислить celcius и т.д. - но ваше заявление печати

printf("%f, %f, %f", c, f, k); 

c, f и k могут быть действительными переменными - но они не являются те, которые вы вычисленных в линиях раньше.Заменить оператор печати с

printf("Celsius: %.1f; Fahrenheit: %.1f; Kelvin: %.1f\n", celcius, fahrenheit, kelvin); 

Или, если вы хотите имя выше номер:

printf("\tC\tF\tK\n\t%6.1f\t%6.1f\t%6.1f\n", celcius, fahrenheit, kelvin); 

Обратите внимание на использование \t - tab характер - чтобы получить вещи, чтобы выровнять (приблизительно) и спецификатор формата %4.1f, чтобы сказать «число в поле шириной 6, с одной значащей цифрой после десятичной дроби».

Еще одно примечание - это Celsius, а не celcius. Но это наименьшее из ваших проблем.

1

Похоже, что он вычисляет, но вы печатаете неправильные переменные. Попробуйте заменить c, f и k celsius, fahrenheit и kelvin в заявлении печати.

1

Вы должны быть последовательными в своих именах переменных, вы не можете смешивать их, как и вы.

Потому что вы его расчета, как так:

fahrenheit=celcius*9/5+32; 
kelvin=celcius+273.15; 

Однако эта линия не печатает его, так как у вас есть неправильные переменные:

printf("%f, %f, %f", c, f, k); 

Изменение, что для правильного имени переменной и типа:

printf("%f, %f, %f", celcius, fahrenheit, kelvin); 
Смежные вопросы