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

trouble with type casting: element of char array to an integer variable

本文关键字:转换 整数 变量 元素 问题 字符 数组 类型转换      更新时间:2023-10-16

这是我尝试在一本我试图学习编程的书中做一个问题的尝试。该问题希望您将英尺和英寸的高度转换为英寸,只需使用 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 强制转换来尝试修复它,但它返回了相同的结果。

用户输入的数字必须从 ascii 转换为数字表示。 这不是类型转换问题,而是转换错误。您可以使用 atoi() 解析字符串并将其解释为整数。 但是您需要这样做,以便检测到字符 ' 和 "。

正如@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 字符串的信息。虽然 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;