使用 cin 进行循环定义

Using cin in for loop defiition

本文关键字:循环 定义 cin 使用      更新时间:2023-10-16

我正在创建一个简单的程序,在for循环体中带有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循环定义修改为for(std::cin >> a; a >= 0;)它只是永远打印第一个数字时。我想知道为什么会发生这种情况。是因为缺少循环增量部分吗?

我认为没有什么可怀疑的;省略 for 循环的"第三"部分意味着除了循环的主体之外,每次迭代后都不会执行任何内容; 因此,一旦通过提供a >= 0值进入循环,并且只要您不更改循环主体中a的值(并且std::cout << "t "<<a<<"n"不会更改a), 循环将"永远"运行,始终打印a的初始值。

for不适合

这些情况。使用 while 而不是 for

当您知道要执行循环的迭代次数时,通常使用 for 循环 - 或者它是可计算的。一会儿循环,或者做...while 循环在这里比 for 循环更合适,因为您不知道用户想要执行循环多少次。

以下是一些参考资料,可以为您提供有关C++中循环结构类型之间差异的更多信息。

https://www.programiz.com/cpp-programming/do-while-loophttp://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;
}

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

你是对的!

当首先调用循环时,此代码是否执行

int i = 0

之后,它会检查测试

i >= 0

对于每次迭代,它都会检查测试,然后检查增量部分

for (int i = 0; i >= 0;std::cin >> a) {
   //code
}

由于您留空了增量部分,因此 A 将永远打印!