我正在for循环体中创建一个带@Override
public void onLoad() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// Your ui code here...
}
});
// Rest of your code here...
}
的简单程序。
std::cin
此程序在#include <iostream>
int main()
{
float a = 0;
for (std::cin >> a; a >= 0;std::cin >> a) {
std::cout << "\t "<<a<<"\n";
}
return 0;
}
中取值并打印,直到您输入负数。
但是当我将a
循环定义修改为for
时,它只会永远打印第一个数字。我想知道为什么会这样。是因为循环增量部分丢失了吗?
答案 0 :(得分:4)
我认为没有什么值得怀疑的;省略for循环的“第三”部分意味着除了循环的主体之外 - 在每次迭代之后都不执行任何操作;因此,一旦通过提供a >= 0
的值来输入循环,并且只要你不改变循环体中a
的值(并且std::cout << "\t "<<a<<"\n"
将不会改变{ {1}}),循环将“永远”运行,始终打印a
的初始值。
答案 1 :(得分:1)
for
不适合这些情况。使用while
代替for
。
当您知道要执行的循环迭代次数时,通常会使用for循环 - 或者它是可计算的。 while循环或者do ... while循环比for循环更合适,因为你不知道用户想要执行循环多少次。
以下是一些参考资料,可以为您提供有关C ++中循环结构类型之间差异的更多信息。
https://www.programiz.com/cpp-programming/do-while-loop http://www.cprogramming.com/tutorial/lesson3.html
#include <iostream>
int main()
{
float a = 0;
while(a>=0){
std::cout << "value: ";
std::cin >> a;
}
return 0;
}
更好的方法如下。
#include <iostream>
int main()
{
float a;
do{
std::cout << "value: ";
std::cin >> a;
}
while(a>=0);
return 0;
}
答案 2 :(得分:0)
你是对的!
首先调用循环时,此代码执行
int i = 0
之后检查测试
i >= 0
并且每次迭代都会检查测试,然后检查incresment部分
for (int i = 0; i >= 0;std::cin >> a) {
//code
}
并且由于你留空了incresment部分, a 将永远打印出来!
答案 3 :(得分:0)
在此for循环中
for(std::cin >> a; a >= 0;)
语句std::cin >> a
的第一个表达式仅在循环的第一次迭代之前计算一次。因此变量a
将不再在循环内更改,循环将是无限的。
考虑到这个循环
for (std::cin >> a; a >= 0;std::cin >> a) {
std::cout << "\t "<<a<<"\n";
}
也是错误的,因为用户可以中断输入。在这种情况下,变量a
将不会被更改,您将再次获得无限循环。
而不是这些陈述
float a = 0;
for (std::cin >> a; a >= 0;std::cin >> a) {
std::cout << "\t "<<a<<"\n";
}
最好写
for ( float a; std::cin >> a && a >= 0; ) {
std::cout << "\t "<<a<<"\n";
}
没有必要在循环外声明变量a
,因为它仅在循环中使用。