【问题标题】:Can't write the output of a loop to a file无法将循环的输出写入文件
【发布时间】:2015-02-10 20:21:24
【问题描述】:

您好,我正在编写一个非常基本的密码生成器,我想使用 ofstream 将循环的输出写入文件。我的想法是每次循环运行时从数组abc 输出一个人声。我不知道如何让它工作和观察。有更好的方法。

#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <fstream>


using namespace std;

int main(){

    srand(time(0));

    cout << "You'r PW is: \t" << endl;
    char abc [] {'A', 'a', 'B' ,'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i', 'J', 'j', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o', 'P', 'p', 'Q', 'q', 'R', 'r', 'S', 's', 'T', 't', 'U', 'u', 'V', 'v', 'W', 'x', 'Y', 'y', 'Z', 'z'};

    for(int i = 0; i <15; i++){
        int randomNum =  rand() % 53;
        cout << abc[randomNum];
        ofstream fob;
        fob.open("contr.txt");
        fob << abc[randomNum];
    }
}

顺便说一句,我得到了像 ',' 和 '->' 这样的字符,它们不在我的数组中。

【问题讨论】:

  • 你不想用 mod 52 代替 mod 53 吗?
  • 无需创建字符数组即可生成随机字符。
  • 那我该怎么做呢?
  • 在声明数组的地方添加cout &lt;&lt; sizeof(abc) &lt;&lt; "\n";。将该数字与您用于 mod 的值进行比较。
  • 另外,关于生成随机数的更好方法,请参阅Generating random integer from a range

标签: c++ ofstream time.h


【解决方案1】:

必须搬家

ofstream fob;
fob.open("contr.txt");

跳出循环。现在你在每次迭代时重写文件。

【讨论】:

  • 索引超出数组范围也是一个问题。假设所有字母都在数组中,则数字应为 52,但缺少 2 个字母。
【解决方案2】:

这里的问题很简单,有两种解决方法。 您的程序所做的是在循环的每次迭代中创建并打开一个新流到文件,但默认情况下ofstream 会覆盖它打开的文件,因此您可以将流打开移出循环(更好的方法)或将标志 ios::app 作为第二个参数添加到流开启器,以便附加您正在输出的内容。

【讨论】:

    【解决方案3】:

    此外,您应该使用int randomNum = rand() % 52;。 在集合 {0, 1, 2, ... 51} 中选择一个数字,假设您忘记将“X”放入数组中,这将是数组的所有可能索引之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2020-08-08
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多