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

在我的第一个版本中,我有 feet = height[0] 和 inches = height[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;

此外,您似乎正在尝试将整数放入单个 ASCII 字符中。您可能想阅读更多关于C-strings 的内容。尽管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 回答