【问题标题】:Whats the error with this c++ construct?这个 c++ 构造有什么错误?
【发布时间】:2012-10-13 22:30:03
【问题描述】:

我是 C++ 的新手。尝试了以下代码:

while((char c = cin.get()) != 'q')
{  //do anything
}

当我尝试编译时,它失败了

错误:“char”之前的预期主表达式。

请帮助我理解这一点

【问题讨论】:

    标签: c++


    【解决方案1】:

    您不能将声明作为表达式的一部分。

    while ((char c = cin.get()) != 'q') { ...
    //      |----------------| <---------------------- this is a declaration
    //     |-------------------------| <-------------- this is an expression
    

    可以在循环的括号内直接声明(而不是在任何嵌套括号内):

    while (char c = cin.get()) { ...
    

    但这会在!c 停止,这不是你想要的。

    这将起作用:

    while (int c = cin.get() - 'q') { // ugly code for illustrative purpose
     c += 'q';
     ...
    }
    

    这也是这样:

    for (char c; (c = cin.get()) != 'q'; ) { // ugly code for illustrative purpose
      ...
    }
    

    更新:另见this SO question

    【讨论】:

      【解决方案2】:

      试试这个:

      char c;
      while((c = cin.get()) != 'q')
      {  //do anything
      }
      

      您在括号内声明变量,因此出现错误:

      while (char c = cin.get() != 'q')
      

      【讨论】:

      • 你可以试试while(char c = cin.get() != 'q')
      • @bubble,有陈述,有表达。语句不能用作表达式的一部分。 char c = ... 是一个声明。
      • 你的带有“双”括号的将不起作用,因为它不再需要本地 c 变量并且丢弃它已经只是暂时记住“true”,这对于 true 来说变得丑陋!= 'q ' 比较 ;-)
      • @Don Reba 他们可以...如果您使用'if(a = 1)'(注意缺少的第二个=),它将始终在 if 中执行操作并将 a 设置为 1
      • @Najzero 我觉得(true != 'q') 仍然是一个有效的比较。它应该总是返回true。不是吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 2015-12-17
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多