这是一个有效的循环吗?

时间:2015-09-25 12:23:09

标签: c++ c++11 for-loop

我目前正在学习c ++而且我无法理解for循环的这种语法。

我知道for(<T>: <V>)(for-each)和标准for(init; cond; incr),但我之前没有遇到过以下内容

for (char ch; cin>>ch && !isdigit(ch); )

如果有人可以在它上面发光,那将非常感激!

4 个答案:

答案 0 :(得分:7)

for (char ch; cin>>ch && !isdigit(ch);    )
     ^^ A ^^  ^^^^^^^^ B ^^^^^^^^^^^^ ^ C ^

答:是init部分,但在这种情况下,它只声明了一个名为char的{​​{1}} B:每次迭代都执行条件部分

  • 它开始以单个字符作为输入,然后如果它不是数字
  • 则继续循环

C:增量部分是否为空,依赖条件部分获取下一个输入(即增量)并导致循环终止

答案 1 :(得分:3)

这与第二个示例的语法相同:

for (  init ;         cond           ; incr)
for (char ch; cin>>ch && !isdigit(ch);     )

这只是默认初始化一个char,然后读取一个新值并确保每次迭代都是一个数字。

答案 2 :(得分:1)

for (char ch; cin>>ch && !isdigit(ch); )

你的标准3部分是循环吗? char ch;声明char名为ch。循环的条件是cin>>ch逻辑和!isdigit(ch)的结果,并且没有任何增加。

这个for循环的结果是它将读入输入,直到输入是一个数字或者如果输入它到达结尾。

for循环不需要在每个部分都有东西。如果你写for(;;),你会有一个永远运行的循环。

答案 3 :(得分:1)

是的。

第一个值只是一个初始化值(ch将保持不变,但只是定义)。

第二个值是一个必须为循环结束的值(条件) - 所以直到char ch不是cin >> ch(它获得一个值)并且直到null不是数字,它会运行。

第三个参数是一个增量,在你的情况下是ch,所以没有任何反应。

编辑:我记得在大学一年级的C ++课程中,我的老师会做类似的事情:

void

并且基本上将代码缩小了一行。