使用 CIN COUT 显示垃圾值的文件对象?
file object showing garbage value using cin cout?
#include<iostream.h>
#include<conio.h>
#include<fstream.h>
void main()
{
int i, j, k;
clrscr();
ofstream out("INT.TST");
ifstream in("INT.TST");
out << 25 << ' ' << 4567 << ' ' << 8910;
in >> i >> j >> k;
cout << i << ' ' << j << ' ' << k;
getch();
}
该程序的输出应为:
25 567 8910
但它显示在这里:
8370 0 1530
为什么它显示垃圾值?
我在 gcc 和 msvc 中测试了类似的代码,它在 Ubuntu 或 Windows 中按预期工作。我相信您没有创建或打开文件的权限(例如 ideone.com 等在线编译器(。因为您尚未检查文件是否已打开(使用is_open()
(,您可能正在使用关闭的文件和不可预知的结果。请参阅以下代码:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int i, j, k;
ofstream out("INT.TST");
ifstream in("INT.TST");
out << 25 << ' ' << 4567 << ' ' << 8910;
out.flush();
if (!in.is_open())
{
std::cout << "Error opening file";
}
else
{
in >> i >> j >> k;
cout << i << ' ' << j << ' ' << k;
}
return 0;
}
它用 ideone 编写Error opening file
,但它可以像你预期的那样在 Ubuntu 和 Windows 上运行。
你的代码可能会被最近的(体面的?(编译器窒息,因为你打开同一个文件两次,一次用于读取,一次用于写入。这在 Windows 上通常是不允许的,除非将特殊值传递给基础 WinAPI 调用。由于 Turbo-C++ 已被弃用了几十年,我不确定当它无法打开文件或只是为您提供封闭流时它是否会引发异常。所以你应该始终控制输入函数!
代码的或多或少的固定版本可能是:
#include<iostream.h>
#include<conio.h> // avoid if you can: non portable
#include<fstream.h>
int main() // NEVER use void main!
{
int i, j, k;
clrscr(); // avoid if you can: non portable
ofstream out("INT.TST");
out << 25 << ' ' << 4567 << ' ' << 8910;
out.close() // Ok, file is now closed
ifstream in("INT.TST");
in >> i >> j >> k;
if (! in) {
cerr << "Error reading filen";
}
else {
cout << i << ' ' << j << ' ' << k;
}
getch(); // avoid if you can: non portable
return 0; // not strictly necessary but IMHO cleaner
}
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在h文件中包含.o对象文件
- 如何使用单独文件中的派生类访问友元函数对象
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 使用逗号解析文件对象?
- 使用 CIN COUT 显示垃圾值的文件对象?
- 如何确保我的"ifstream"文件对象指向的文件内容已更新?
- 如何从 GDI+ 图元文件对象获取原始图元文件字节
- pyQt5 将文件对象传递给 QWebEngineView
- 从文件对象的当前位置删除字符
- 使用相同的文件对象按顺序写入和读取文件
- 将 ETW 文件对象与 DiskIO 事件相关联
- 如何在构建时将 JSON 文件/对象包含在C++中
- 如何使用运算符<<通过 << 将文件对象馈送到我的类?
- 确定两个文件路径引用同一文件对象的最佳方法是什么
- 文件映射对象和文件对象可以互换使用吗
- 如何判断给定点是否在STereoLithography(.stl)文件对象c++内
- 如何使用Windows Portable Devices C++API获取MTP设备公开的文件夹中的所有文件(对象)的列
- 如何使用结构传递文件对象
- 文件对象->文件名不返回文件的完整路径