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);
            }
}

入力されている温度と開始温度を尋ねますが、数式を計算しないのはなぜですか?

4

4 に答える 4

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);
于 2013-10-15T23:08:37.130 に答える
1

variable をどのように定義したかは示されていませんtempが、この方法で文字列を読み取ることは非常に危険です。が文字の場合temp、そのアドレスを指して文字列として扱うのは問題です。確かに'\0'の直後にその場所にtemp書き込みがあり、ユーザーが複数の文字を入力した場合、ユーザーが与える可能性のあるダメージはさらに大きくなります。

getc次の呼び出しで 1 文字を読み取ることができます。

temp = getc(stdin);

と比較しているため、小文字であることを確認することをお勧めしますc

temp = lower(getc(stdin));

次に、明らかに、変数を出力するときは、計算した変数を出力する必要があります。などを計算celciusしますが、printステートメントは

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

cf、およびkは有効な変数である可能性がありますが、前の行で計算したものではありません。printステートメントを次のように置き換えます

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 の数値で、小数点以下の有効桁数が 1 桁」であることに注意してください。

もう 1 つ注意してください。それCelsiusは ではなく、celciusです。しかし、それはあなたの問題の最小のものです。

于 2013-10-15T23:09:15.590 に答える
1

計算しているように見えますが、間違った変数を出力しています。print ステートメントで c、f、k を摂氏、華氏、ケルビンに置き換えてみてください。

于 2013-10-15T23:10:15.640 に答える
1

変数名に一貫性を持たせる必要があります。自分のようにそれらを混同することはできません。

次のように計算しているためです。

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

ただし、変数が間違っているため、この行は出力されません。

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

それを適切な変数名に変更し、次のように入力します。

printf("%f, %f, %f", celcius, fahrenheit, kelvin); 
于 2013-10-15T23:10:28.150 に答える