2012-06-30 52 views
-1

我正在编写一个程序,用于猜测从大文本文件中获取的单词。一步是通过用户输入来确定字符串的长度。程序无法通过“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”部分读取用户输入的长度。当我输入任意数字并按回车时,什么都不会发生。该程序仍在运行,只是不断地输入数据。任何帮助?这与之前在prigram中使用ifstream有什么关系,尽管它有不同的功能?

+14

上面的代码显然不是你正在运行或不完整的:'cin.get(length,)'。粘贴实际的代码或测试用例。 – wilx

+1

[不编译](http://ideone.com/09dry) –

+0

正确的用法是'cin >> length'。 – chris

回答

1

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

我想你并没有终止在输入文件的最后一行。 longershorter都将成立,并且limit将永远不会到达。将在测试这个循环中:

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

至少会停止无限循环,让你在你的逻辑重新审视(目前还不清楚是什么longershorter将用于

一些一般性意见:

  1. 把跟踪语句的问题区域内可以帮助您确定问题
  2. 你如果了解C++而不是。 0您使用std::vector<std::string> words;
  3. if语句中的布尔值更容易像这样读取:if (longer || shorter)比您拥有它。
  4. 你总是返回0 - 而是使功能void

你还设置全局counter 0内部,但你仍然需要在后面printresults()所以你会得到任何输出。