0

これが私がプログラミングを学ぼうとしている本で問題を起こそうとする私の試みです。この問題では、フィートとインチを個別に要求するのではなく、1 cinコマンドを使用するだけで、フィートとインチの高さをインチに変換する必要があります。

cout << "Enter height in following format F'I\":";
cin >> height;
feet = (int)height[0];
inches = (int)height[2];

cout << "feet/height[0]: " << feet << "/" << height[0] << "\t" << "inches/height[2]: " << inches << "/" << height[2] << endl; //to test what went wrong, didn't help me much

cout << "You are " << feet * 12 + inches << " inches tall";

6'8 "の入力の場合、出力は次のようになります。

Enter height in following format F'I":6'8"
feet/height[0]: 54/6    inches/height[2]: 56/8
You are 704 inches tall

これの最初のバージョンでは、キャストなしでフィート=高さ[0]およびインチ=高さ[2]でした。プログラミングとC++についての私の限られた理解から、6と8のASCII番号を取得しているように見えるので、intキャストを使用して修正しようとしましたが、同じ結果が返されました。

4

2 に答える 2

0

ユーザーが入力した数値は、ASCII から数値表現に変換する必要があります。これは型キャストの問題ではなく、変換エラーです。atoi() を使用して文字列を解析し、整数として解釈できます。ただし、文字 ' と " が検出されるようにする必要があります。

于 2012-10-15T23:27:00.180 に答える
-1

@bobestmが答えたように、これはキャストの問題ではありません。C文字列を整数に変換する必要があります。彼はatoi()を提案しましたが、C++を使用する場合はistringstreamを好みます。

char some_string[100];

cout << "Enter your number: " << endl;
cin >> some_string;

istringstream iss;
iss.str(string(some_string));

int num;

iss >> num;

if (iss.fail())
{
    cout << some_string << " is not a number! " << endl;
}

ただし、cinフォーマットされた入力を許可するため、変換せずにユーザーに整数を入力させることができます。

int some_int;

cout << "Enter your number: " << endl;
cin >> some_int;

また、整数を1つのASCII文字に収めようとしているようです。C文字列についてもっと読みたいと思うかもしれません。std ::stringはC++で使用する方がはるかに簡単ですが、それでもC文字列がどのように機能するかを学ぶのに役立ちます。

これはあなたが必要とすることをするはずです:

string str;
cout << "Enter height in following format F'I\":"

getline(cin, str);

size_t index = str.find("'");

string feet_str = str.substr(0, index);
string inches_str = str.substr(index + 1);

int feet, inches;

istringstream iss;

iss.str(feet_str);
iss >> feet;

iss.clear();

iss.str(inches_str);
iss >> inches;
于 2012-10-15T23:31:48.303 に答える