1

我想知道是否有其他类型的“循环”可以用来创建更易于阅读的程序。我正在玩循环,我想知道是否有更快或更简单的方法,而不是在输入单词时重复循环......

#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <fstream>
#include <math.h>
#include <stdio.h>
#include <string>
#include <string.h>
#include <cstdlib>

using namespace std;

char guess1, guess2, guess3;
int main()
{
    // the word is cat...

    cout << " Please enter your first guess : _ _ _ \n";
    cin >> guess1;

    if (guess1 == 'c')
    {
        cout << " please enter your second guess: c _ _ \n";
        cin >> guess2;
        if (guess2 == 'a')
        {
            cout << " please enter your second guess: c a _ \n"; 
            cin >> guess3;
        } 
        if (guess2 == 't')
        {
            cout << " please enter your second guess: c _ t \n";
            cin >> guess3; 
        }
        else
        {
            cout << " Wrong answer : # ";
            cin >> guess3;
        }

        if (guess1 == 'a')
        {
             cout << " please enter your second guess: _ a _ \n";
             cin >> guess2;
        }
        if (guess1 == 't')
        {
            cout << " please enter your second guess: _ _ t \n";
            cin >> guess2;
        }
        else
        {
            cout << " Wrong answer : # ";
            cin >> guess2;
        }
    }
    return 0;
}
4

3 回答 3

4

当然有。你可以这样做:

bool solved = false;
prompt = "Please enter your guess:";
char guess;
char f1='_', f2='_', f3='_'

while(!solved){
   cout << prompt << f1 << f2 << f3 << std::endl;
   cin.get(guess);
   switch(guess){
      case 'c':
        f1 = 'c';
        break;
      case 'a':
        f2 = 'a';          
        break;
      case 't':
        f3 = 't';
        break;
      default:
        cout << "wrong answer";
        break;
   }
   if(f1=='c' && f2=='a' && f3=='t')
     solved = true;
}

您可以轻松地使用 while(1) 并休息一下;在最后的 if 条件下。我没有费心去实际运行它,所以可能会有一些错误,但希望这能回答你如何做这样的事情的一般问题。

我还注意到您没有变量供您猜测,但静态使用了 c _ _ 和 _ _ t。当你有 2 个猜测时会发生什么?这就是为什么使用变量是一个好主意的原因。

于 2013-08-13T17:23:49.130 回答
2

这是给你的状态机。它接受当前状态和输入,并为您提供新状态。如果您的输入没有新状态,则用户输入了错误的值。

这样做的好处是您可以自动创建状态机以支持更多单词。

std::map<std::pair<std::string, char>, std::string> translation;
translation[std::make_pair("_ _ _", 'c')] = "c _ _";
translation[std::make_pair("_ _ _", 'a')] = "_ a _";
translation[std::make_pair("_ _ _", 't')] = "_ _ t";
translation[std::make_pair("c _ _", 'a')] = "c a _";
translation[std::make_pair("c _ _", 't')] = "c _ t";
translation[std::make_pair("_ a _", 't')] = "_ a t";
translation[std::make_pair("_ a _", 'c')] = "c a _";
translation[std::make_pair("_ _ t", 'c')] = "c _ t";
translation[std::make_pair("_ _ t", 'a')] = "_ a t";
translation[std::make_pair("c _ t", 'a')] = "c a t";
translation[std::make_pair("c a _", 't')] = "c a t";
translation[std::make_pair("_ a t", 'c')] = "c a t";

std::string current_state = "_ _ _";
char input;
while(current_state != "c a t") {
    cout << "Please enter your guess: " << current_state << endl;
    cin >> input;
    std::pair<std::string, char> p = std::make_pair(current_state, input);
    if(translation.find(p) == translation.end()) {
        cout << "wrong answer";
        continue;
    }
    current_state = translation[p];
}
于 2013-08-13T18:11:48.060 回答
0

来自http://en.wikipedia.org/wiki/Loop_(computing)#Loops

循环是一系列语句,指定一次但可以连续执行多次。循环“内部”的代码(循环体,下面显示为 xxx)被遵守指定的次数,或者对每个项目集合执行一次,或者直到满足某些条件,或者无限期地执行。

您只在代码中使用 if 语句;这些不是循环,而是简单的一次性条件选择。

有关 C++ 循环的一些基本信息,请参阅http://www.cplusplus.com/doc/tutorial/control/

于 2013-08-13T17:25:24.120 回答