程序无法通过“cin”

时间:2012-06-30 18:20:23

标签: c++ cin

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

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

#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有关,虽然功能不同吗?

1 个答案:

答案 0 :(得分:1)

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

我认为你没有在输入文件的最后一行终止。 longershorter都是真的,永远不会达到limit。在循环中对此进行测试:

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

这至少会阻止无限循环,让你重新审视你的逻辑(不清楚longershorter将用于什么。

一些一般性意见:

  1. 在问题区域中放置跟踪语句可以帮助您识别问题。
  2. 您将了解有关C ++的更多信息,而不是char words[x][y]使用std::vector<std::string> words;
  3. if语句中的布尔值更容易阅读:if (longer || shorter)而不是你拥有它。
  4. 你总是返回0 - 而是使函数void
  5. 您还要在counter内将全局selectlength()设置为0,但您稍后仍需要printresults(),因此您将无法获得输出。