使用 cin 进行循环定义
Using cin in for loop defiition
我正在创建一个简单的程序,在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 将永远打印!
- 在定义字符数组(井字游戏)的 for 循环中应用输入限制
- 在C++中循环访问自定义结构列表的小问题
- 具有迭代器和自定义步长的循环结束条件
- 在 for 循环中定义的临时数组,并分配给属于指针数组的指针
- 循环访问自定义双链表
- 需要帮助定义循环控制变量(while loops)C++
- C++11:没有复制构造函数的自定义基于范围的循环
- c++在循环中定义一组概率分布
- 如何在已定义的名称模式上循环
- C++未定义的行为unordered_map为基于范围的 for 循环中的右值
- 循环依赖结构,使用前向声明时结构的错误重定义
- For 和 while 循环在全局定义的函数中不起作用
- 如何在C++中循环浏览自定义列表
- 基于范围的 for 循环,用于包含C++中的指针的自定义链表,仅返回对象
- 自定义对象构造函数在循环外部循环
- 带有自定义对象的C 范围循环
- 为什么 for 循环不能定义两个作用域的变量?
- 在主循环外部多个文件上定义全局变量
- 使用 cin 进行循环定义
- 循环定义类型