2

プログラムのエンドユーザーに、華氏から摂氏に変換したい値をCで入力するように促すにはどうすればよいのでしょうか。

基本的に、私は合計n00bであり、次のようなすばらしい「プログラム」を書いているので、次のようになります。

    //Simple program to convert Fahrenheit to Celsius

    int main (int argc, char *argv[])
    {
     double celsius, fahrenheit, result;

     celsius = result;
     fahrenheit = 27;
     result = (fahrenheit - 32) / 1.8;

     printf("27 degress Fahrenheit is %g degrees Celsius!", result);

     return 0;
    }

私の言いたいことを知っているなら、実際の「機能」を追加したいと思います。これをテストプログラムにして、単純な算術式の評価を実際に示すのではなく、実際に少しだけ役立つようにしたいと思います。

とにかく、 scanf(3)のマニュアルページにリストされている関数を使用して、ユーザーが入力したデータの認識を支援し、それを華氏変数に格納できるかどうか疑問に思いました。

さて、プログラムの実行時に、エンドユーザーに摂氏から華氏への変換を希望するのか、華氏から摂氏への変換を希望するのかを尋ねる質問をすることができれば、本当にすばらしいでしょう。しばらくして、私の本の「意思決定」の章を読むまで待ちます!:)

アップデート:

kiamlalunoによって指摘されたように、役に立たない変数の結果を削除します。

    //Simple program to convert Fahrenheit to Celsius

    int main (int argc, char *argv[])
    {
 double fahrenheit, celsius;

 fahrenheit = 27;
 celsius = (fahrenheit - 32) / 1.8;

 printf("27 degress Fahrenheit is %g degrees Celsius!", celsius);

 return 0;
    }

更新更新:

ここに投稿されたすべての人の役立つ提案を取り入れようとしていますが、コードでさらに問題が発生しています。

//Simple program to convert Fahrenheit to Celsius and Celsius to Fahrenheit

int main (int argc, char *argv[])
{
int celsius, fahrenheit, celsiusResult, fahrenheitResult;
celsiusResult = (fahrenheit - 32)*(5/9);
fahrenheitResult = (celsius*(9/5)) + 32;
int prompt;

printf("Please press 1 to convert Fahrenheit to Celsius, or 0 to convert Celsius to Fahrenheit please:\n ");
scanf("%i", &prompt);
if(prompt == 1) {
    printf("Please enter a temperature in Fahrenheit to be converted into Celsius!:\n");
    scanf("%i", &fahrenheit);
    printf("%i degress Fahrenheit is %i degrees Celsius!", fahrenheit, celsiusResult);

}
else {
    printf("Please enter a temperature in Celsius to be converted into Fahrenheit:\n");
    scanf("%i", &celsius);
    printf("%i degreses Celsius is %i degrees Fahrenheit", celsius, fahrenheitResult);
}

return 0;
}

計算自体が完全に間違っていることを除いて、すべてがうまく機能しています。一瞬、これは数値自体を整数型に変更したためかもしれないと思いましたが、もう一度2倍にしましたが、それでもちょっと厄介でした。

何かご意見は?

4

4 に答える 4

2

double を読み取るために使用scanf()するには、正しい書式文字列を使用する必要があります。それは%lf「ロングフロート」のためのものです(%f単独でフロートに読み込まれる場合)。その後、double に直接読み取ることができます。印刷する場合も同様です。

int main (int argc, char *argv[])
{
    double fahrenheit, celsius;

    printf("farenheit? ");     /* write a prompt */
    scanf("%lf", &fahrenheit); /* read a double into the fahrenheit variable */

    celsius = (fahrenheit - 32) / 1.8;

    printf("%lf degress Fahrenheit is %lf degrees Celsius!\n", fahrenheit, celsius);

    return 0;
}

これは数値以外の入力をまったく処理しないことに注意してください。他の入力手法を使用する必要があります。

[編集]

あなたは確かにコードを飛躍させており、多くの進歩を遂げているようです。:)

最新の更新に対処するには、いくつかの問題があります。あなたのコードは実際には何も計算しません。式を適用するのが早すぎました。fahrenheit意味のある値が得られるまで (つまりcelsius、ユーザーが変換する値を入力した後)待機する必要があります。これらの数式を関数に移動して変換を実行することをお勧めします。また、整数ではなく倍精度の使用に固執する必要があります。整数を使用すると、必要な精度が得られません。

double convert_fahrenheit_to_celsius(double fahrenheit)
{
    return (fahrenheit - 32)*(5/9);
}

double convert_celsius_to_fahrenheit(double celsius)
{
    return (celsius*(9/5)) + 32;
}

int main (int argc, char *argv[])
{
    double celsius, fahrenheit, celsiusResult, fahrenheitResult;
    int prompt;

    printf("Please press 1 to convert Fahrenheit to Celsius, or 0 to convert Celsius to Fahrenheit please:\n ");
    scanf("%i", &prompt);
    if(prompt == 1) {
        printf("Please enter a temperature in Fahrenheit to be converted into Celsius!:\n");
        scanf("%lf", &fahrenheit);

        /* now convert user-input fahrenheit to celsius */
        celsiusResult = convert_fahrenheit_to_celsius(fahrenheit);

        printf("%lf degress Fahrenheit is %lf degrees Celsius!", fahrenheit, celsiusResult);
    }
    else {
        printf("Please enter a temperature in Celsius to be converted into Fahrenheit:\n");
        scanf("%lf", &celsius);

        /* now convert user-input celsius to fahrenheit */
        fahrenheitResult = convert_celsius_to_fahrenheit(celsius);

        printf("%lf degreses Celsius is %lf degrees Fahrenheit", celsius, fahrenheitResult);
    }

    return 0;
}
于 2010-08-07T05:36:51.113 に答える
1

ユーザーに入力を求める場合は、scanf に %lf タグを付けて使用します。

//Simple program to convert Fahrenheit to Celsius

int main (int argc, char *argv[])
{
    double fahrenheit, result;

    printf("Please enter a number for farenheit: ");
    scanf("%lf", &fahrenheit);
    result = (fahrenheit - 32) / 1.8;

    printf("27 degress Fahrenheit is %g degrees Celsius!", result);

    return 0;
}

ユーザーに摂氏または華氏が必要かどうかを尋ねるには、ifステートメントとelseステートメントと呼ばれるものが必要です。

int main (int argc, char *argv[])
{
    double celsius, fahrenheit, result;
    int ForC;

    printf("1 for Celsius or 0 for Fahrenheit plz: ");
    scanf("%d", &ForC);
    if(ForC == 1) {
        scanf("%lf", &fahrenheit);
        result = (fahrenheit - 32) / 1.8;
        printf("fahrenheit to celsius:%lf", result);
    }
    else {
        scanf("%lf", &celsius);
        result = (celsius*9.0)/5.0 + 32;
        printf("celsius to farenheit:%lf", result);
    }

    return 0;
}
于 2010-08-07T05:45:31.940 に答える
0

誤っている可能性のあるユーザー入力の処理は、scanf()の戻り値をチェックすることで実行できます。予想される値の数(この場合は1)と等しくなければなりません。それ以外の場合は、入力を繰り返す必要があります。

于 2010-08-07T10:21:37.550 に答える
0

UPDATE UPDATE の場合: ユーザーから値を取得した後、計算を実行してみてください。そうでない場合、 の結果の値celsius, fahrenheit, celsiusResult, fahrenheitResultは不明です。

于 2010-08-07T22:22:31.933 に答える