-1

さて、天気プログラムを作成する必要があります。コードを実行しようとすると、エラーは発生しませんが、「開始温度を入力してください」と「終了温度を入力してください」と出力されるだけです。ただし、データを入力することはできません。変更する必要があるものはありますか? コードを完成させていないことはわかっていますが、残りのコードに進む前に、入力をテストしたかっただけです。助けてくれてありがとう!

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

4 に答える 4

3

これ:

if (temp == c)

の新しく読み取られtempた値を、初期化されていない変数の未定義の値と比較していますc。これは未定義の動作です。

あなたはおそらく意味した

if (temp == 'c')

文字と比較しますが、次のことも必要です。

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

の戻り値をチェックするscanf()と、プログラムがより堅牢になり、初期化されていない値のさらなる使用が回避されることに注意してください (scanf()何かの読み取りに失敗した場合、宛先変数は書き込まれていないため、読み取るべきではありません)。

于 2013-10-08T16:51:20.660 に答える
0
if (temp == c)

temp を c の初期化されていない値と比較しています

同じ

if (temp == f)

その後、すべてが正常に機能します。よりユーザーフレンドリーにするために、printf に '\n' を入れます。

このような、

printf("enter a starting temperature \n");
于 2013-10-08T16:56:32.107 に答える