类型转换的问题:char数组的元素为整数变量

时间:2012-10-15 23:15:05

标签: c++

这是我尝试从一本书中学习问题的尝试。这个问题要求你只用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来尝试修复它,但它返回了相同的结果。

2 个答案:

答案 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;