来自Schaums C ++文本
删除goto-说使用标志
代码段:
const int N2 = 5;
int i, j, k;
for (i = 0; i < N2; i++)
{ for (j = 0; j < N2; j++)
{ for (k = 0; k < N2; k++)
if (i + j + k > N2)
goto esc;
else
cout << i + j + k << " ";
cout << "* ";
}
esc: cout << "." << endl;
}
解决方案:
const int 5;
int i, j, k;
bool done = false;
for (i = 0; i < N2; i++)
{ for (j = 0; j < N2 && !done; j++)
{ for (k = 0; k < N2 && !done; k++)
if (i + j + k > N2)
done true;
else
cout << i + j + k << " ";
cout << "* ";
}
cout << "." << endl;
done = false;
}
结构化解决方案的输出不会产生相同的结果......如同转到... 我看不出问题
谢谢...
答案 0 :(得分:6)
编写这种循环转义功能的好方法是返回;声明。取:
const int N2 = 5;
void inner_loop(const int i) {
for (int j = 0; j < N2; ++j)
{
for (int k = 0; k < N2; ++k)
{
if (i + j + k > N2)
return;
cout << i + j + k << " ";
}
cout << "* ";
}
}
for (int i = 0; i < N2; ++i)
{
inner_loop(i);
cout << "." << endl;
}
答案 1 :(得分:3)
const int 5;
int i, j, k;
bool done = false;
for (i = 0; i < N2; i++)
{ for (j = 0; j < N2 && !done; j++)
{ for (k = 0; k < N2 && !done; k++)
if (i + j + k > N2)
done = true;
else
cout << i + j + k << " ";
if (!done) // <-- Add this line
cout << "* ";
}
cout << "." << endl;
done = false;
}
答案 2 :(得分:1)
首先,您的格式很难阅读。这有很大帮助:
const int N2 = 5;
int i, j, k;
for (i = 0; i < N2; i++)
{
for (j = 0; j < N2; j++)
{
for (k = 0; k < N2; k++)
{
if (i + j + k > N2)
goto esc;
else
cout << i + j + k << " ";
}
cout << "* ";
}
esc: cout << "." << endl;
}
现在我不知道这个Schaum家伙是谁,但他错了。 goto是在这种情况下使用的完全合法的声明。不过,这是你应该需要的唯一原因。消除goto不会让你获益。现在你有了一个额外的变量,每个循环都需要一个额外的分支和测试。
我建议你不要在这个问题上提出建议。
答案 3 :(得分:0)
您需要添加条件:
if (!done) cout << "* ";
答案 4 :(得分:-3)
抛出异常。