在do while循环中发出关注ig关键字continue

时间:2019-01-26 05:53:07

标签: c

对于一个项目,我需要要求用户输入两个数字 如果第一个输入(行)是错误的,则程序必须再次询问该行 如果第二个输入不正确(匹配),则程序必须再次询问行和匹配项。

我尝试进行do while循环,但是即使经过几次尝试也无法按我的意愿工作。

您是否有一些线索可以使此循环按预期工作?

ask_number()是一个从stdin询问数字的函数,它在参数中提示输入return或数字,如果字符串不是仅数字,则为0

check_line()check_matches()检查输入是否正确。

my_putstr()是明确的。

gamestate包含有关check_函数的信息

int player_turn(gamestate_t *gamestate)
{
    int line = 0;
    int matches = 0;

    my_putstr("Your turn:\n");
    do {
        line = ask_number("Line: ");
        if (check_line(line, gamestate)) {
            matches = ask_number("Matches: ");
        }
        else {
            line = 0;
            continue;
        }
    } while (!check_matches(line, matches, gamestate));
    return (0);
}

如果为该行输入了错误的输入,该函数将退出。
但是,如果输入的行号正确,则匹配的错误号程序将按预期工作,包括输入错误的行号。

1 个答案:

答案 0 :(得分:0)

我认为您不需要在这里使用continue关键字。您可以简单地使用一个布尔值,该布尔值在开始时初始化为0,然后仅在满足两个条件后才跳出循环(即,您同时获得linematches的有效输入)通过将布尔变量设置为1。

int player_turn(gamestate_t *gamestate)
{
    int line = 0;
    int matches = 0;
    int bFound = 0;      //boolean variable indicating whether both values have been found

    my_putstr("Your turn:\n");
    do {

        line = ask_number("Line: ");
        if (check_line(line, gamestate)) {
            matches = ask_number("Matches: ");

            if (check_matches(line, matches, gamestate)) {
                bFound = 1;     //both inputs were valid, so set boolean variable to true and break out of loop
            }
            else {
                line = 0;
            }
        }
    } while(!bFound);

    return 0;
}

如果您查看上面的代码,如果第一个输入失败,则您的程序将不会继续要求输入matches,而是提示用户重新输入{{1} }。

如果第二个输入失败,则程序将line重置为0,然后循环重新开始,要求再次输入line的值。如果两个值均有效,则将line设置为1(TRUE)并退出循环。