【问题标题】:Reading from a file, and writing to an array in a function C++从文件中读取,并在函数 C++ 中写入数组
【发布时间】: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&gt;&gt; 失败,您不检查。我建议在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)

标签: c++ arrays file


【解决方案1】:

这是我的解决方案,希望这有助于将来搜索此问题。解决方案是创建另一个数据类型为 ifstream 的变量。这个变量访问了同一个文件,但允许我读取它而不是写入它。我不得不从 randomData 变量中关闭文件,然后打开 inputrandomData 变量。下面是修改后的代码。

using namespace std;
ofstream randomData;
ifstream inputrandomData;
void randomgenerator();
void read();
int main() {

    randomgenerator();
    read();

    return 0;
}


void randomgenerator() {
    srand(time(0));
    randomData.open("randomData.txt");
    for (int counter = 0; counter < 100; counter++) {
        randomData << rand() % 100+1 << endl;
    }
    randomData.close();

}


void read() {
    inputrandomData.open("randomData.txt");
    int numarray[100] = {};
    for (int i = 0; i < 100; i++) {
        inputrandomData >> numarray[i];
        cout << numarray[i];
    }


}

感谢大家的帮助!

【讨论】:

  • 您应该将ofstream 变量移动到randomgenerator() 内部,并将ifstream 变量移动到read() 内部。尽量不要使用全局变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
相关资源
最近更新 更多