这是我尝试从一本书中学习问题的尝试。这个问题要求你只用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 ++的有限理解来看,它似乎得到了ascii数字为6和8,所以我使用了int cast来尝试修复它,但它返回了相同的结果。
答案 0 :(得分:0)
用户输入的数字必须从ascii转换为数字表示。这不是类型转换问题,而是转换错误。 您可以使用atoi()来解析字符串并将其解释为整数。但是你需要这样做,以便检测到字符'和'。
答案 1 :(得分:-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;