无法将循环的输出写入文件
问题描述:
您好我编写了一个非常基本的密码生成器,我想使用ofstream将循环的输出写入文件。我的想法是每次循环运行从阵列abc
输出一个人声。我不知道要如何使它工作和obvs。有一个更好的方法来做到这一点。无法将循环的输出写入文件
#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];
}
}
顺便说一句,我得到的字符像','和' - >'这不是我的数组。
答
必须移动
ofstream fob;
fob.open("contr.txt");
退出循环。现在你在每次迭代中重写文件。
+2
索引数组的边界也是一个问题。假设所有的字母都在数组中,数字应该是52,但是有2个字母丢失。 – 2015-02-10 20:40:54
答
这里的问题很简单,有两个解决方案。 您的程序所做的是在循环的每次迭代中创建并打开一个新文件流,但默认情况下,ofstream
会覆盖它打开的文件,以便您可以将流打开循环(更好的方式)或添加标记ios::app
作为流开启器的第二个参数,以便附加您输出的内容。
答
此外,您应该使用int randomNum = rand() % 52;
。 在集合{0,1,2,... 51}中选择一个数字,假设您忘记在数组中放置'X',这将成为数组的所有可能索引之一。
难道你不想要mod 52而不是mod 53吗? – Cornstalks 2015-02-10 20:23:31
没有必要创建一个字符数组来产生随机字符。 – user3437460 2015-02-10 20:26:25
那么我该怎么做呢? – Andy 2015-02-10 20:28:20