使用cin for for loop defiition

时间:2017-01-19 23:47:31

标签: c++

我正在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时,它只会永远打印第一个数字。我想知道为什么会这样。是因为循环增量部分丢失了吗?

4 个答案:

答案 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,因为它仅在循环中使用。