C++输出到文件不正确



这个程序将生成0-232之间的数字,我正试图将这个随机生成的样本复制到一个文件中;但是它将输出作为多个等号(=(的字符串。我不明白这个错误是从哪里来的。

#include<iostream>
#include<conio.h>
#include <ctime>
#include<fstream>
#include <cstdlib>
#include <iomanip>
#include <math.h>
#include <vector>
#include <random>
#include <string>
using namespace std;
int main(){
int ya;
vector<unsigned long long> instance;
fstream inFile;
inFile.open("outputFile.txt");
if (!inFile) {
cout << "The file can't be opened" << endl;
}
std::mt19937_64 generator;
generator.seed(std::time(0));
uniform_int_distribution<unsigned long long>randomNumber(0, 4294967295);

for (int index = 0; index < 10; index++) {
cout << randomNumber(generator) << endl;
inFile << randomNumber(generator)<<"n";
//instance.push_back(randomNumber(generator));
}



if (inFile.is_open()) {
cout << inFile.rdbuf();
}

return 0;
}

您的代码中存在一些问题。首先,您应该在in|out模式下显式地打开文件。其次,在每个循环中生成两个不同的随机数:一个用于cout显示,另一个用于写入文件。第三,在读取文件内容之前,您需要倒带文件。

以下是您代码的精简和更正版本:

#include <iostream>
#include <ctime>
#include <fstream>
#include <iomanip>
#include <random>
using namespace std;
int main()
{
fstream inFile;
inFile.open("outputFile.txt", ios_base::out|ios_base::in); // Open for OUTPUT and input!
if (!inFile) {
cout << "The file can't be opened" << endl;
return -1; // Error - no point continuing!
}
std::mt19937_64 generator;
generator.seed(std::time(0));
uniform_int_distribution<unsigned long long>randomNumber(0, 4294967295);
for (int index = 0; index < 10; index++) {
unsigned long long number = randomNumber(generator); // Save the number so same is displayed and stored!
cout << number << endl;
inFile << number << "n";
}
// We shouldn't need this check, because of the earlier " if (!inFile) " check.
if (inFile.is_open()) {
cout << "File contents:" << endl;
inFile.seekg(0); // REWIND the file before reading its contents!
cout << inFile.rdbuf();
inFile.close();
}
else { 
cout << "file is not open";
}
cout << endl;
return 0;
}

还有一点需要注意:用于存储输出的变量的名称inFile很奇怪,但它不会影响代码。


EDIT:在用户4581301的非常有用的评论之后,这里有一个版本可以工作,无论;outputFile.txt";文件已存在:

int main()
{
fstream inFile;
inFile.open("outputFile.txt", ios_base::out); // Open for OUTPUT and truncate
if (!inFile) {
cout << "The file can't be opened for writing!" << endl;
return 0;
}
std::mt19937_64 generator;
generator.seed(std::time(0));
uniform_int_distribution<unsigned long long>randomNumber(0, 4294967295);
for (int index = 0; index < 10; index++) {
unsigned long long number = randomNumber(generator); // Save the number so same is displayed and stored!
cout << number << endl;
inFile << number << "n";
}
inFile.close();
inFile.open("outputFile.txt", ios_base::in); // Open for INPUT (implicit rewind)
if (inFile.is_open()) {
cout << "File contents:" << endl;
cout << inFile.rdbuf();
inFile.close();
}
else {
cout << "The file can't be opened for reading!";
}
cout << endl;
return 0;
}
#include<iostream>
#include<conio.h>
#include <ctime>
#include<fstream>
#include <cstdlib>
#include <iomanip>
#include <math.h>
#include <vector>
#include <random>
#include <string>
using namespace std;
int main() {
int ya;
vector<unsigned long long> instance;
fstream inFile;
inFile.open("outputFile.txt", ios_base::out);
if (!inFile) {
cout << "The file can't be opened" << endl;
}
std::mt19937_64 generator;
generator.seed(std::time(0));
uniform_int_distribution<unsigned long long>randomNumber(0, 4294967295);
for (int index = 0; index < 10; index++) {
cout << randomNumber(generator) << endl;
inFile << randomNumber(generator) << "n";
//instance.push_back(randomNumber(generator));
}
if (inFile.is_open()) {
inFile.close();
}
return 0;
}

最新更新