C ++错误C2181:非法其他没有匹配if

时间:2014-12-24 13:10:29

标签: c++

我是C ++的新手。我一直在关注一个在线课程,教你如何用C ++制作一个Hangman游戏。在大多数情况下代码工作,每次我调试它运行正常。我完成了整个代码并仔细检查了它,但是我收到的其他错误之一我得到的错误是“错误C2181:非法其他没有匹配if。

这是我的代码。

// Hangman game
// CN

// Header file
#include "stdafx.h"
// Input/Output
#include <iostream>
// Text
#include <string>
// Information storage
#include <vector>
// Figuring out the information storage
#include <algorithm>
// Converts lower cased letters to higher case letters
#include <cctype>
// Reads computers time and distributes a word from a list accordingly
#include <ctime>
// Library for system
#include <cstdlib>

using namespace std;


int main()
{
    // Constant data type which is a fixed value, MaxWrong in Pascal Text and the max number of guesses.
    const int MaxWrong = 6;


    vector<string> words;
    words.push_back("SANTA CLAUSE");
    words.push_back("REINDEER");
    words.push_back("PRESENT");
    words.push_back("TREE");
    words.push_back("MILK");
    words.push_back("COOKIE");

    // Parenthesis must always match
    srand(static_cast<unsigned int>(time(0)));
    random_shuffle(words.begin(), words.end());
    const string theWord = words[0];
    int wrong = 0;
    string soFar(theWord.size(), '_');
    string used = "";

    cout << "\n******** Welcome to Chaye's Hangman ********\n\n";
    cout << "      __  \n";
    cout << "     |  | \n";
    cout << "     |    \n";
    cout << "     |    \n";
    cout << "     |    \n";
    cout << "     |    \n";
    cout << "  ___|____  \n\n";
    cout << " Do Your Best Human  \n\n";

    // Loop
    while ((wrong < MaxWrong) && (soFar != theWord))
    {
        cout << "\n You have " << (MaxWrong - wrong);
        cout << " incorrect tries left.\n";
        cout << "\n You've used these letters:\n" << used << endl;

        char guess;
        cout << "\n\n Enter your guess: ";
        cin >> guess;
        guess = toupper(guess);
        while (used.find(guess) != string::npos)
        {
            cout << "\n You've already tried " << guess << endl;
            cout << " Enter your guess: ";
            cin >> guess;
            guess = toupper(guess);
        }

        used += guess;

        if (theWord.find(guess) != string::npos)
        {
            cout << " That's right " << guess << " is in the word,\n";

            for (int i = 0; i < theWord.length(); ++i)
            {
                if (theWord[i] == guess)
                {
                    soFar[i] = guess;
                }
            }
        }

        else
        {
            cout << " sorry. " << guess << " isn't in the word.\n";
            ++wrong;
        }


        // If one is wrong
        if (wrong == 1)
        {
            cout << "      __  \n";
            cout << "     |  | \n";
            cout << "     |  O \n";
            cout << "     |    \n";
            cout << "     |    \n";
            cout << "     |    \n";
            cout << "  ___|____  \n\n";
            cout << " Do Your Best Human  \n\n";
        }
        else
        {
            cout << endl;
        }

        // If one is wrong
        if (wrong == 2)
        {
            cout << "      ___  \n";
            cout << "     |   | \n";
            cout << "     |   O \n";
            cout << "     |   @ \n";
            cout << "     |    \n";
            cout << "     |    \n";
            cout << "  ___|____  \n\n";
            cout << " Do Your Best Human  \n\n";
        }
        else
        {
            cout << endl;
        }


        // If one is wrong
        if (wrong == 3)
        {
            cout << "      ___  \n";
            cout << "     |   | \n";
            cout << "     |   O \n";
            cout << "     |  /@ \n";
            cout << "     |     \n";
            cout << "     |     \n";
            cout << "  ___|____  \n\n";
            cout << " Do Your Best Human  \n\n";
        }
        else
        {
            cout << endl;
        }

        // If one is wrong
        if (wrong == 4)
        {
            cout << "      ___   \n";
            cout << "     |   |  \n";
            cout << "     |   O  \n";
            cout << "     |  /@\ \n";
            cout << "     |      \n";
            cout << "     |      \n";
            cout << "  ___|____  \n\n";
            cout << " Do Your Best Human  \n\n";
        }
        else
        {
            cout << endl;
        }

        // If one is wrong
        if (wrong == 5)
        {
            cout << "\n You've been hung  \n";
            cout << "      ___   \n";
            cout << "     |   |  \n";
            cout << "     |   O  \n";
            cout << "     |  /@\ \n";
            cout << "     |  /   \n";
            cout << "     |      \n";
            cout << "  ___|____  \n\n";
            cout << " Do Your Best Human  \n\n";
        }
        else
        {
            cout << "\n I'm suprised you've got this far\n";
        }
        cout << "\n The word was " << theWord << endl;


    }

    // If one is wrong
    if (wrong == MaxWrong)
    {
        cout << "\n You've been hung  \n";
        cout << "      ___   \n";
        cout << "     |   |  \n";
        cout << "     |   O  \n";
        cout << "     |  /@\ \n";
        cout << "     |  / \  \n";
        cout << "     |      \n";
        cout << "  ___|____  \n\n";
        cout << " Do Your Best Human  \n\n";
    }
    else
    {
        cout << "\n I'm suprised you've got this far\n";
    }
    cout << "\n The word was " << theWord << endl;


    // Pause Console
    system("pause");

    // Kills the application once done
    return 0;
}

2 个答案:

答案 0 :(得分:1)

此行中不应有分号:

if (theWord.find(guess) != string::npos);

此分号终止整个if语句,并且无条件执行以下{...}块。因此,else跟随if语句不再匹配。

您还错过了在while语句中关闭)括号:

while (used.find(guess) != string::npos
{
...
}

答案 1 :(得分:-2)

更改

** else **

else

您的编译器将其解释为运算符。如果仍然失败,请编辑错误的帖子。另外值得注意的是,如果编译w / -g标志,你会得到一些有用的调试输出。