对于一个项目,我需要要求用户输入两个数字 如果第一个输入(行)是错误的,则程序必须再次询问该行 如果第二个输入不正确(匹配),则程序必须再次询问行和匹配项。
我尝试进行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);
}
如果为该行输入了错误的输入,该函数将退出。
但是,如果输入的行号正确,则匹配的错误号程序将按预期工作,包括输入错误的行号。
答案 0 :(得分:0)
我认为您不需要在这里使用continue
关键字。您可以简单地使用一个布尔值,该布尔值在开始时初始化为0,然后仅在满足两个条件后才跳出循环(即,您同时获得line
和matches
的有效输入)通过将布尔变量设置为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)并退出循环。