程序无法通过"cin"

program cannot get past "cin"

本文关键字:cin 程序      更新时间:2023-10-16

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

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

#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]=='')
        {
            shorter=true;
            break;
        }
    }
    if (words[i][length+1] != '')
    {
        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 有任何关系,尽管功能不同?

你在

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

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

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

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

一些一般性评论:

  1. 将跟踪语句放在问题区域内可以帮助您识别问题。
  2. 您将详细了解C++ if 而不是您使用char words[x][y] std::vector<std::string> words;
  3. if语句中的布尔值更容易阅读,如下所示:if (longer || shorter)比你拥有它的方式更容易理解。
  4. 你总是返回 0 - 而是让函数void

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