C ++跳过cin语句。进入无限循环

时间:2014-05-03 22:10:44

标签: c++ loops cin infinite

出于某种原因,它首次进入cin语句,但在此代码中每隔一段时间就会跳过它。运行几次之后,我意识到它出于某种原因进入默认情况,甚至没有要求用户输入。为什么呢?

这是代码。这是一个带有巨大开关声明的菜单。 switch语句中的函数在这里不相关,因为它只是整个循环。

int main()
{
    Document* myDocs = new Document[10];
    int docCount = 0;
    bool menu = true;
    int userInput = 0;

    while ( menu == true )
    {
        //int userInput = 0; 
        userInput = 0;
        cout << "----------------MENU----------------" << endl << endl;
        cout << " --------(1) LOAD DOCUMENT (1)--------- " << endl << endl;
        cout << "--------(2) OUTPUT DOCUMENT (2)--------" << endl << endl;
        cout << " --------(3) ANALYZE DOCUMENT (3)-------- " << endl << endl;
        cout << " ------(4) COMPARE TWO DOCUMENTS (4)------ " << endl << endl; 
        cout << " ----------(5)  ENCRYPT  (5)---------- " << endl << endl; 
        cout << "-----------(6)  DECRYPT  (6)----------" << endl << endl;
        cout << "-------------(7) EXIT (7)--------------" << endl << endl; 

        cin >> userInput;
        string docName;
        string outputLoc;

        switch (userInput)
        {
        case 1:
            // Function
            break;
        case 2:
            // Function
            break;
        case 3-8:
            // Function
            break;
        default:
            break;
        }

基本上,我首先输入第一个userinput。假设我输入1.然后它进入案例1.然后在它离开案例1后,它进入一个无限循环,继续显示菜单。它不应该停止在cin声明吗?那是我不明白的。

EDIT ::

案例1是我担心的主要问题,因为我正在尝试1和1,而案例1不起作用。 这是案例1的完整代码:

    case 1: // Load Document
        {
            string inputLoc;
            cout << "Please input the document name:" << endl;
            cin >> docName;
            myDocs[docCount].setName(docName);
            myDocs[docCount].id = docCount;
            cout << "Input Location: " << endl;
            cin >> inputLoc; 
            myDocs[docCount].loadDocument(inputLoc);
            docCount++;
            break;
        }

我开始推测我的loadDocument函数有问题。 这是代码:

    void Document::loadDocument(string name)
    {
ifstream myFile(name);
int numOflines = 0; 
string theLine;
char words; 

while (myFile.get(words))
{
    switch (words)
    {
    case '.':
        numOflines++;
        break;
    case '?':
        numOflines++;
        break;
    case '!':
        numOflines++;
        break;
    }
}

lineCount = numOflines; 
setLineCt(numOflines);
arr = new Line[lineCount];
myFile.close();
char theChar;
ifstream myFile2(name);
int key = 0;

if (myFile2.is_open())
{
    for ( id = 0; id < lineCount; id++ )
    {           
        while (myFile2>> noskipws>>theChar && theChar != '.' && theChar != '!' && theChar != '?') // Changed from || to &&
        {
            //myFile2>> noskipws >> theChar;
            theLine[key] = theChar;
            key++;
        }           

        myFile2>>theChar;

        arr[id].setStr(theLine); 
    }
}
}

基本上我正在尝试加载文档并存储字数和行数。它有什么问题吗?

0 个答案:

没有答案