字符串向量中的混合数据
Mashed-up data in string vector
多年来我一直在努力解决这个问题,
我有一个程序可以从提供的字典(txt 文件)中随机输入一个单词,
然后将这个词添加到字符串向量中。
randomWord() 函数按预期工作,但当我尝试打印出向量时,getWords() 似乎混搭了所有内容。
向量声明:
vector<string> pass_words; //Array of words used in password
这是两个函数:
//gets a random word from the wordlist file.
string randomWord()
{
wordfile.open ("wordlist.txt"); //open the wordlist file
string wordonline;
string word;
int wordwant = rand()%58110; //Maximum is 58109 which is the last word, minimum is 0.
for (int linenum = 0; getline (wordfile, wordonline) && linenum <(wordwant+1) ; linenum++) {
if (linenum == wordwant) {
word = wordonline;
}
}
wordfile.close();
return word;
}
// gets random words based on number of words supplied.
void getWords() {
cout << "WORD GET" << endl;
string thisword;
for (int i=0 ; i<num_words; i++) {
thisword = randomWord();
pass_words.push_back(thisword) ;
cout << pass_words[i] << " " ; //debugging
}
cout << endl; //debugging
return;
}
这是一个示例输出
WORD GET
posingdsate
我做错了什么?
同样显然,当我为 pass_words 向量放置另一个循环时,我可以看到这些值,但从来没有在 getWords() 函数之后或之内看到。
这是另一个循环的输出:
housemaids
--
necessitate
--
contacts
--
kampala
--
pion
--
scooped
--
posing
--
很有可能您正在从 CRLF 分隔文件中读取 CR 字符,假设它只是 LF 分隔,并打印它们,其中回车 return 会将光标猛击到离开并覆盖现有文本。
您需要将其读作 CRLF 或删除任何 CR 或 LF 字符。
你也可以强制换行:
std::cout << pass_words[i] << std::endl;
多年来我一直在努力解决这个问题,
我有一个程序可以从提供的字典(txt 文件)中随机输入一个单词, 然后将这个词添加到字符串向量中。
randomWord() 函数按预期工作,但当我尝试打印出向量时,getWords() 似乎混搭了所有内容。
向量声明:
vector<string> pass_words; //Array of words used in password
这是两个函数:
//gets a random word from the wordlist file.
string randomWord()
{
wordfile.open ("wordlist.txt"); //open the wordlist file
string wordonline;
string word;
int wordwant = rand()%58110; //Maximum is 58109 which is the last word, minimum is 0.
for (int linenum = 0; getline (wordfile, wordonline) && linenum <(wordwant+1) ; linenum++) {
if (linenum == wordwant) {
word = wordonline;
}
}
wordfile.close();
return word;
}
// gets random words based on number of words supplied.
void getWords() {
cout << "WORD GET" << endl;
string thisword;
for (int i=0 ; i<num_words; i++) {
thisword = randomWord();
pass_words.push_back(thisword) ;
cout << pass_words[i] << " " ; //debugging
}
cout << endl; //debugging
return;
}
这是一个示例输出
WORD GET
posingdsate
我做错了什么? 同样显然,当我为 pass_words 向量放置另一个循环时,我可以看到这些值,但从来没有在 getWords() 函数之后或之内看到。
这是另一个循环的输出:
housemaids
--
necessitate
--
contacts
--
kampala
--
pion
--
scooped
--
posing
--
很有可能您正在从 CRLF 分隔文件中读取 CR 字符,假设它只是 LF 分隔,并打印它们,其中回车 return 会将光标猛击到离开并覆盖现有文本。
您需要将其读作 CRLF 或删除任何 CR 或 LF 字符。
你也可以强制换行:
std::cout << pass_words[i] << std::endl;