0

Prata の C++ Primer Plus を使用して C++ を独学していますが、問題が発生しています。VS2012 Pro でエラーは発生せず、プログラムは正常にコンパイルされますが、入力しようとすると未処理の例外 (Prata 2.5.exe の 0x76ED016E (ntdll.dll) で未処理の例外: 0x00000000: 操作が正常に完了しました。) が発生します。最初の選択肢として C または F を選択しましたが、どこが間違っているのかわかりません。この演習では、華氏を摂氏に変換する簡単なプログラムを作成するように求められただけでしたが、この変換を行うためにオンライン ソースをよく使用するので、このようなプログラムが役立つと思いました。もし私が自分のプログラムを持っていたら、心配する必要はなく、それを CLI 以外のバージョンに拡張し、より多くの変換オプション (ヤードからメートルなど) に拡張することができます。どんな助けでも大歓迎です。

#include "stdafx.h"
#include <iostream>

// Function Prototypes
double convertToF(double);
double convertToC(double);

int main()
{
    using namespace std;

    char* convertChoice = "a";  // Initializing because the compiler complained.  Used to choose between celsius and fahrenheit.
    int choiceNumber; // Had issues using the char with switch so created this.
    double tempNumber; // The actual temperature the user wishes to convert.

    cout << "Do you wish to convert to [C]elcius or [F]ahrenheit?";
    cin >> convertChoice;

    // IF() compares convertChoice to see if the user selected C for Celsius or F for fahrenheit.  Some error catching by using the ELSE.  No converting char to lower though in case user enters letter in CAPS.
    if (convertChoice == "c")
    {
        cout << "You chose Celsius.  Please enter a temperature in Fahreinheit: " << endl;
        cin >> tempNumber;
        choiceNumber = 1;
    }
    else if (convertChoice == "f")
    {
        cout << "You chose Fahrenheit  Please enter a temperature in Celsius: " << endl;
        cin >> tempNumber;
        choiceNumber = 2;
    }
    else
    {
        cout << "You did not choose a valid option." << endl;
    }

    // SWITCH() grabs the int (choiceNumber) from the IF(), goes through the function and outputs the result.  Ugly way of doing it, but trying to make it work before I make it pretty.
    switch (choiceNumber)
    {
    case 1:
        double convertedFTemp;
            convertedFTemp = convertToC(tempNumber);
        cout << convertedFTemp << endl;
        break;
    case 2:
        double convertedCTemp;
            convertedCTemp = convertToF(tempNumber);
        cout << convertedCTemp << endl;
        break;
    default:
        cout << "You did not choose a valid option." << endl;
        break;
    }

    // To make sure the window doesn't close before viewing the converted temp.
    cin.get();

    return 0;
}

// Function Definitions
double convertToF(double x)
{
    double y;
    y = 1.8 * x + 32.0;
    return y;
}

double convertToC(double x)
{
    double y;
    y = x - 32 / 1.8;
    return y;
}

また、すべてが正しいかどうかもわかりません。すなわち。関数内の式とスイッチの順序。それを修正しないでください。いまいましいものがコンパイルされたら、私は自分でそれを理解します。:)

4

1 に答える 1

3

コメントの経験則を参照してください。詳細を十分に理解していない状態で char* を使用しているため、適切に使用できません。std::string を使用すると、まさに必要なことを実行できます。

今後の参考のために: char* を使用

  • メモリを割り当てる必要があります
  • 比較するには strcmp を使用する必要があります
  • あなたは自分で長さを見る必要があります
  • メモリの割り当てを解除する必要があります

それは初心者にとってはたくさんあります。std::stringを使用します。

string convertChoice = "a";

忘れないで

#include <string>
于 2013-03-15T07:03:10.343 に答える