-1

我正在编写一个程序,它将猜测从一个大文本文件中提取的单词。第一步是接受用户输入来确定字符串的长度。

编辑:添加完整代码,进行了一些更改

#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”部分以读取用户输入的长度时,我的问题就会发生。当我输入任何数字并按回车键时,什么也没有发生。该程序仍在运行,只是不断地无限期地接受输入。有什么帮助吗?它可能与我在 prigram 早期使用 ifstream 有什么关系,尽管在不同的函数中?

4

1 回答 1

1

你有一个无限循环selectlength()。外部for循环不会终止,因为您在i循环内部递减(循环计数器)(不是一个好主意,也许会找到更好的方法)。

我认为您不会在输入文件的最后一行终止。longer并且shorter都将是真实的,并且limit永远不会达到。在循环中对此进行测试:

if (words[i][0] == '\0')
    break;

这至少会停止无限循环并允许您重新审视您的逻辑(目前尚不清楚将用于什么longershorter将用于什么。

一些一般性评论:

  1. 将跟踪语句放在问题区域内可以帮助您识别问题。
  2. char words[x][y]如果您使用C++ 而不是std::vector<std::string> words;
  3. 语句中的布尔值if像这样更容易阅读:if (longer || shorter)比你如何拥有它更容易。
  4. 你总是返回 0 - 而不是 make the function void

您还在counter内部将全局设置为 0,selectlength()但稍后您仍然需要它,printresults()因此您不会得到任何输出。

于 2012-06-30T20:05:49.850 回答