我正在编写一个程序来猜测从大文本文件中获取的单词。一步是获取用户输入以确定字符串的长度。
编辑:添加完整代码,进行了一些更改
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int i(0),n(0),counter(0),limit(0);
char words[60000][30];
int initarray() {
int length(0);
string line;
char temp;
ifstream wordlist ("text.txt");
if (wordlist.is_open())
{
while (wordlist.good())
{
getline (wordlist,line);
length=line.length();
for (n=0;n!=length;n++)
{
temp=line.at(n);
words[i][n]=temp;
}
i++;
counter++;
}
}
else
{
cout<<"file not opened";
}
wordlist.close();
return 0;
}
int selectlength()
{
int length;
bool shorter(false),longer(false);
cout <<"length of word"<<endl;
cin >> length
limit=counter;
counter=0;
for (i=0;i<limit;i++){
for (n=0;n!=length;n++){
if (words[i][n]=='\0')
{
shorter=true;
break;
}
}
if (words[i][length+1] != '\0')
{
longer=true;
}
if (longer==true || shorter==true)
{
i--;
}
}
return 0;
}
int printresults(){
for (i=0;i!=counter;i++){
for (n=0;n<=20;n++){
cout << words[i][n];
}
cout <<endl;
}
return 0;
}
int main() {
initarray();
selectlength();
printresults();
return 0;
}
但是每当编译好的程序到达“cin”部分读取用户输入的长度时,我的问题就会发生。当我输入任何数字然后按Enter键时,没有任何反应。该程序仍在运行,只是不断地输入输入。有帮助吗?它可能与我之前在prigram中使用ifstream有关,虽然功能不同吗?
答案 0 :(得分:1)
selectlength()
中有一个无限循环。外部for
循环没有终止,因为你在循环内递减i
(循环计数器)(不是一个好主意,也许找到更好的方法)。
我认为你没有在输入文件的最后一行终止。 longer
和shorter
都是真的,永远不会达到limit
。在循环中对此进行测试:
if (words[i][0] == '\0')
break;
这至少会阻止无限循环,让你重新审视你的逻辑(不清楚longer
和shorter
将用于什么。
一些一般性意见:
char words[x][y]
使用std::vector<std::string> words;
if
语句中的布尔值更容易阅读:if (longer || shorter)
而不是你拥有它。void
。 您还要在counter
内将全局selectlength()
设置为0,但您稍后仍需要printresults()
,因此您将无法获得输出。