我们被告知在学校中如果goto 循环。教师给出的程序不起作用。通过不工作我的意思是它被编译,但当我执行它时,输出是什么:
#include <iostream>
using namespace std;
int main() {
int i = 0;
prev: i++; // prev label
cout << "a ";
if(i < 20) { goto prev; }
return 0;
}
要实现的实际循环等效于for循环:
for(int i = 0; i < 20; i++) {
cout << "a ";
}
谢谢!
答案 0 :(得分:4)
给定程序的问题是i
的值在循环开始时递增,并且在结束时执行检查;因此,它将在第一次迭代之前递增,并始终执行至少一次迭代。以下内容将更准确地反映给定的for
循环:
int main() {
int i = 0;
next: if(!(i < 20)) goto end;
cout << "a ";
i++;
goto next;
end: return 0;
}
在大多数情况下,标签和gotos很少使用 - 它们导致更难以遵循代码,只有在99%的时间内使用/ for / if块(例如此处)的方法,并且是最有用的了解以便更好地理解编译器的工作以及代码与其生成的机器代码的关系。
答案 1 :(得分:4)
根据 fast 的方式,您可能不会注意程序输出,因为它不会等待用户。它刚关闭。您应该让它等待您观察它的运行时行为:
#include <iostream>
using namespace std;
int main()
{
int i = 0;
prev: // prev label
i++;
cout << "a ";
if(i < 20)
{
goto prev;
}
// wait for the user to press [enter]
cin.get();
return 0;
}
答案 2 :(得分:1)
非常感谢每个人。我正在使用带有g ++的WIndoes 8。
问题是我使用文件名来执行应用程序。当我使用 filename.exe 执行时,它会成功执行并显示输出。感谢大家!