【发布时间】:2012-04-30 06:14:04
【问题描述】:
看这段代码:
#include <iostream>
using namespace std;
int main()
{
string s;
int n;
float x;
again:
cout << "Please Type this: ABC456 7.8 9 XYZ\n";
cin >> s >> n >> x >> s;
cout << "\nDo you want to try Again(y/n)? ";
char t;
cin >> t;
if (t=='y' || t=='Y')
goto again;
return 0;
}
只需尝试键入“ABC456 7.8 9 XYZ”并按回车,它会在提示用户重试之前导致程序退出。我知道输入是错误的,它们不在它们的类型中,但为什么会导致退出?以及如何避免这种退出?
【问题讨论】:
-
@CppLearner 是标签语句
again: cout << "Please Type this: ABC456 7.8 9 XYZ\n";的标签 -
@CppLearner:它是指示要使用的 goto 语句的标签。亲爱的,请参见第 8 行....
-
谢谢。首先,我希望
<string>包含在标题中。让我执行......很难阅读代码在同一行。谢谢。 -
您要求将 7.8(浮点数)作为第二项,但尝试将其读入
n、int。这可能不是幸福的秘诀(因为x得到 0.8,s 得到 9;而 XYZ 的空白或“X”读作t)。 -
因为空白和 X 都不与 y 或 Y 相同,所以读入
t的字符不满足循环条件。当对这样的事情感到困惑时,首先要做的是打印出关键控制值,在本例中为t。如果您在t(cout << "t = [" << t << "]" << endl;) 中打印该值,您会立即明白为什么goto没有被执行。或者在调试器中单步执行代码并以这种方式检查值。这种技术是调试的基础。
标签: c++