这是我目前的代码:
char ch;
int sum = 0;
double values[10];
int i = 0;
cin >> ch;
while (!isalpha(ch))
{
values[i] = ch;
sum += values[i];
i++;
cin >> ch;
}
发生的事情是,如果我输入值1,则将其作为char分配给ch。现在ch将它的值赋给double并进行隐式转换。因此它将ASCII值“1”赋给值[i]。我希望它只为值[i]分配1。有一个更好的方法吗?或者有什么东西我不见了?
答案 0 :(得分:3)
如果您想将数字字符转换为相应的数字值,您只需从中减去'0'
:
char ch = '2';
int value = ch - '0'; // value is 2
但是,读取浮点数的最佳方法是从double
中提取cin
:
double value = 0;
if (cin >> value)
{
// value is good
}
else
{
// invalid value was entered; handle the error appropriately
}
请注意,如果提取失败并且您想继续从流中读取,则需要调用cin.clear()
来清除流的失败状态,您可能需要调用cin.ignore()
来忽略任何尾随字符(例如,如果您使用基于行的输入,则在下一个换行符之前,您需要忽略所有内容)。
答案 1 :(得分:1)
将整个数字作为字符串读取,并使用double
函数或其他一些特定于C ++的方法将整个数据转换为strtod
。
答案 2 :(得分:1)
虽然这不是一个好的解决方案,但在分配数组元素时,您可以在技术上从char变量中减去“0”的ASCII代码:
char ch;
int sum = 0;
double values[10];
int i = 0;
cin >> ch;
while (!isalpha(ch))
{
values[i] = ch - '0';
sum += values[i];
i++;
cin >> ch;
}
如果ch是一个数字(0-9),则ch-'0'会以“int”形式给出数字ch({0'在ASCII table中为dec48,数字0为0 9从dec48到dec57)。
虽然这有点像黑客,但可能不应该使用,但是,这是一个可能的解决方案。
答案 3 :(得分:0)
字符串流应该能够为你做转换。通过atoi也可以完成工作。