While 和 Do/While 循环意外中断
While and Do/While Loops break unexpectedly
此程序旨在无限循环....因此,如果有人输入 5,它会要求输入另一个数字(5 或 9),如果 he/she 输入 9,它会要求输入 5 或 9。 .. 无穷无尽。
using namespace std;
int main()
{
cout << "Hello world! Enter a number" << endl;
int x;
cin >> x;
while (x == 5)
{
std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
cout << "Try again, you got 5" << endl;
cin >> x;
}
while (x == 9)
{
cout << "You got 9, try again mate" << endl;
std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
cin >> x;
}
return 0;
}
但我不明白当我切换数字时(比如“5”到“9”再回到“5”)程序就停止了。
我想是因为在 Loop #1 和 Loop #2 完成执行后,程序从未 return 到任何一个,而是直接继续到 "return 0," 但我不知道如何制作程序return 到两个循环。
PS:我试过切换到 do-while 循环并从括号中取出 "cin" 语句,但它们没有解决问题。
正如@Billy 在评论中所说,你的逻辑有问题。首先,如果你想要一个 无限 循环,只要某个数字等于 5 或 9 就不要循环。然后,在循环中,只需检查它是什么数字make 做出正确的输出。
#include<iostream>
using namespace std;
int main()
{
int x;
cout << "Hello world! Enter a number" << endl;
while(1)
{
cin >> x;
std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
if(x == 5) cout << "Try again, you got 5" << endl;
if(x == 0) cout << "You got 9, try again mate" << endl;
}
return 0;
}
您的代码没有给出所需的行为,因为当第二个 while 循环结束时,您没有重复该过程并且程序结束。
所以您想要的是循环直到用户输入了 5
或 9
.
以外的一些数字 为了做到这一点,我们使用 while
循环运行到无穷大,我们使用 break 来逃避如果用户输入的数字不同于 5
或 9
,则无限循环。
您可以像这样修改代码:
using namespace std;
int main()
{
cout << "Hello world! Enter a number" << endl;
int x;
while(1){
cin >> x;
std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
if(x == 5)
cout << "Try again, you got 5" << endl;
else if(x == 9)
cout << "You got 9, try again mate" << endl;
else
break;
}
return 0;
}
删除此行:std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
。
有了它,您将不会读取输入。
在你的例子中没有无限循环。我建议为每个值调用一个函数:
inline void five(int &x)
{
std::cout << "Try again, you got 5" << std::endl;
std::cin >> x;
}
inline void nine(int &x)
{
std::cout << "You got 9, try again mate" << std::endl;
std::cin >> x;
}
inline void other(int &x)
{
std::cout << "Try again: ";
std::cin >> x;
}
int main()
{
std::cout << "Hello world! Enter a number" << std::endl;
int x{};
std::cin >> x;
bool running{true};
while (running) {
if (x == 5) five(x);
else if (x == 9) nine(x);
else other(x);
}
}
此程序旨在无限循环....因此,如果有人输入 5,它会要求输入另一个数字(5 或 9),如果 he/she 输入 9,它会要求输入 5 或 9。 .. 无穷无尽。
using namespace std;
int main()
{
cout << "Hello world! Enter a number" << endl;
int x;
cin >> x;
while (x == 5)
{
std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
cout << "Try again, you got 5" << endl;
cin >> x;
}
while (x == 9)
{
cout << "You got 9, try again mate" << endl;
std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
cin >> x;
}
return 0;
}
但我不明白当我切换数字时(比如“5”到“9”再回到“5”)程序就停止了。
我想是因为在 Loop #1 和 Loop #2 完成执行后,程序从未 return 到任何一个,而是直接继续到 "return 0," 但我不知道如何制作程序return 到两个循环。
PS:我试过切换到 do-while 循环并从括号中取出 "cin" 语句,但它们没有解决问题。
正如@Billy 在评论中所说,你的逻辑有问题。首先,如果你想要一个 无限 循环,只要某个数字等于 5 或 9 就不要循环。然后,在循环中,只需检查它是什么数字make 做出正确的输出。
#include<iostream>
using namespace std;
int main()
{
int x;
cout << "Hello world! Enter a number" << endl;
while(1)
{
cin >> x;
std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
if(x == 5) cout << "Try again, you got 5" << endl;
if(x == 0) cout << "You got 9, try again mate" << endl;
}
return 0;
}
您的代码没有给出所需的行为,因为当第二个 while 循环结束时,您没有重复该过程并且程序结束。
所以您想要的是循环直到用户输入了 5
或 9
.
以外的一些数字 为了做到这一点,我们使用 while
循环运行到无穷大,我们使用 break 来逃避如果用户输入的数字不同于 5
或 9
,则无限循环。
您可以像这样修改代码:
using namespace std;
int main()
{
cout << "Hello world! Enter a number" << endl;
int x;
while(1){
cin >> x;
std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
if(x == 5)
cout << "Try again, you got 5" << endl;
else if(x == 9)
cout << "You got 9, try again mate" << endl;
else
break;
}
return 0;
}
删除此行:std::cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
。
有了它,您将不会读取输入。
在你的例子中没有无限循环。我建议为每个值调用一个函数:
inline void five(int &x)
{
std::cout << "Try again, you got 5" << std::endl;
std::cin >> x;
}
inline void nine(int &x)
{
std::cout << "You got 9, try again mate" << std::endl;
std::cin >> x;
}
inline void other(int &x)
{
std::cout << "Try again: ";
std::cin >> x;
}
int main()
{
std::cout << "Hello world! Enter a number" << std::endl;
int x{};
std::cin >> x;
bool running{true};
while (running) {
if (x == 5) five(x);
else if (x == 9) nine(x);
else other(x);
}
}