【发布时间】:2020-05-15 12:41:00
【问题描述】:
我想先说这是 102 csc 课程中的第一个作业。我的101老师不是最好的,所以我没有那么好的基础。
我有一个任务,要求每个动作都在自己的功能中。我必须生成随机数,然后将这些数字写入文件,然后再进行一些其他操作。我已经创建并写入了文件。但是,我遇到了无法将文件中的值读入数组的问题。输出到控制台时,它们仍然为 0。我确信这是我在功能上做错的事情,但我接受任何批评都没有问题。我将包括下面的代码。我现在使用的函数名为void read()。
#include <iostream>
#include <fstream>
#include <time.h>
#include <stdlib.h>
#include <cstddef>
using namespace std;
fstream randomData;
void randomgenerator();
void read(fstream &randomdata);
int main() {
randomgenerator();
read(randomData);
return 0;
}
void randomgenerator() {
srand(time(0));
randomData.open("randomData.txt");
for (int counter = 0; counter < 100; counter++) {
randomData << rand() % 100+1 << endl;
}
}
void read(fstream &randomData) {
int numarray[100] = {};
for (int i = 0; i < 100; i++) {
randomData >> numarray[i];
cout << numarray[i];
}
}
感谢您抽出宝贵时间提供意见。使用 std 命名空间是因为教授希望我们这样做。我知道它没有效率。
【问题讨论】:
-
您正在从您写入的同一
fstream中读取,但在写入文件后您并没有将fstream返回到文件的开头,因此您正在从末尾读取该文件,导致operator>>失败,您不检查。我建议在randomgenerator()内部使用std::ofstream,然后在read()内部使用单独的std::ifstream -
警告:使用
rand()is highly problematic,我们强烈建议您使用合适的random number generator facility in the Standard Library,以产生高质量的随机值。您使用time(NULL)作为随机数种子意味着如果在同一秒内运行,这将产生相同的结果,并且在许多平台上rand()是barely random at all。 -
The std namespace is used because the professor wants us to. I understand it is not efficient.其实是it's worse than just inefficient。 -
你需要做的第一件事就是通过课程,所以给教授他们要求的东西。只要知道有时他们会要求您做一些愚蠢的事情。其中一些愚蠢的事情是Wax-on Wax-off 的事情,你稍后会弄清楚这一点,有些只是愚蠢的。祝你好运,现在弄清楚哪些是哪些。
-
@killerkodygaming 您不能将
ofstream复制到ifstream。您将打开一个ofstream到文件名,写入它,然后关闭它。然后打开一个ifstream到相同的文件名,从中读取,然后关闭它。或者,如果您想重复使用相同的fstream进行写入和读取,只需在读取之前在流上调用seekg(0)。