【发布时间】:2012-11-16 17:59:36
【问题描述】:
我想一个一个地得到一串数字,所以我使用while循环
以cin.get() 作为函数,逐一获取我的数字。
但cin.get() 将数字设为chars,即使我正在尝试使用
铸造我无法让我的变量包含数值而不是 ascii 值
我得到的数字作为输入。
【问题讨论】:
我想一个一个地得到一串数字,所以我使用while循环
以cin.get() 作为函数,逐一获取我的数字。
但cin.get() 将数字设为chars,即使我正在尝试使用
铸造我无法让我的变量包含数值而不是 ascii 值
我得到的数字作为输入。
【问题讨论】:
cin.get 无法解析数字。您可以手动完成 - 但既然它已经存在,为什么还要重新实现它呢?*
int number;
std::cin >> number;
一般来说,流操作符(<< 和>>)负责格式化输出和输入,而istream::get 只提取原始字符。
*当然,如果你不得不重新实现这个功能,那也没用。
要从数字字符中获取数值,您可以利用十进制数字 0-9 的字符代码是连续的。所以下面的函数可以对它们进行转换:
int parse_digit(char digit) {
return digit - '0';
}
【讨论】:
static_cast。编译器会在不被告知的情况下将char 值转换为int。
malloc 的返回值“用于文档”:int *ip = (int*)malloc(3);。如果他们忘记了#include <stdlib.h>,编译器会将malloc 视为返回int 的函数(是的,我确实说这是古老的C)。在int 与指针大小不同的架构上,这会导致重大问题。所以我从来没有喜欢使用强制转换来记录程序员希望编译器无论如何都会做的事情,因为这种强制转换可以将编译时错误变成运行时错误。