#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
为什么显示垃圾值?
答案 0 :(得分:0)
您的代码可能会阻塞在最近的(不错的)编译器上,因为您要打开同一文件两次,一次要读取,一次要写入。在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 file\n";
}
else {
cout << i << ' ' << j << ' ' << k;
}
getch(); // avoid if you can: non portable
return 0; // not strictly necessary but IMHO cleaner
}
答案 1 :(得分:0)
我在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上正常工作。