【发布时间】:2017-07-25 18:23:31
【问题描述】:
我正在逐字符读取文件的内容:
文件有:
000001111100000
当我使用这段代码阅读时
int content;// converting to char will result in proper output.
std::ifstream fin;
fin.open("zero_one");
fin>>content;
while (!fin.eof())
{
std::cout<<content;
fin>>content;
}
fin.close();
我得到的输出为:1111100000(前导零不存在)但尾随零存在。
问题是:当我使用>> 运算符读取时,为什么我在输出中没有得到前导零,而在输出中得到尾随零。
另外,如果我将 int 转换为 char 的 content 变量,则输出与文件的内容相同。为什么会这样?据我所知,char 和int 之间的唯一区别是变量的字节大小。
【问题讨论】:
-
int只存储数字的值。000001111100000和1111100000具有相同的值。如果实际的字符表示对您的用例很重要,则需要将数字作为字符串读取。 -
"据我所知,char 和 int 之间的唯一区别是变量的字节大小。"对于 int 和 char 类型确实如此,但是对于这些类型,>> 输入运算符的重载方式不同。
-
user fluent in C++ 不需要发布此内容。
-
不,它不依赖于实现。标准(从 C++03 到 C++17 后草案的所有版本)要求初始标志为
skipws | dec。最后发现它记录在std::basic_ios::init(),在Postconditions下。 -
你已经避免了
while (!fin.eof())最隐蔽的影响,但是你已经让自己在无效输入上陷入无限循环,因为你只检查文件结尾,如果它程序可能永远无法到达发现不好的价值。推荐while (fin>>content)作为替代品。
标签: c++ file-handling