C++ 在 if-else 语句中递增全局计数器变量

C++ incrementing global counter variables in if-else statements

所以我的总体目标是制作一个程序,显示与用户输入的波长数相关的颜色(400 到 445 是紫色,等等)。输入需要在 400 到 700 之间,并让用户知道输入是高还是低。我还需要实现一个全局计数器变量,该变量将计数并显示在用户输入和颜色范围之间执行的比较量(对于它经历的每个其他语句,递增 1)。这是我到目前为止所拥有的。 代码:

#include <iostream>
using namespace std;
int g_counter;

int main()
{
g_counter = 0;
int userinput;

cout<< "please enter wavelength between 400 and 700: "<< endl;
cin>>userinput;
++g_counter;
if (userinput < 400){
    cout << "Wavelength to small, try again"<< endl;
    
    cout << "You evauluated this many conditions: "<< g_counter << endl; 
}
++g_counter;
else (userinput >= 400 && userinput <=445){
    cout<<  "Your wavelength corresponds to the color violet"<< endl;

    cout << "You evauluated this many conditions: "<< g_counter << endl; 
}
++g_counter;
else (userinput > 445 && userinput <= 475){
    cout<< "Your wavelength corresponds to the color blue"<< endl;
    
    cout << "You evauluated this many conditions: "<< g_counter << endl; 
}
++g_counter;
else (userinput > 475 && userinput <= 510){
    cout<< "Your wavelength corresponds to the color green"<< endl;
    
    cout << "You evauluated this many conditions: "<< g_counter << endl; 
}
++g_counter;
else (userinput > 510 && userinput <= 570){
    cout<< "Your wavelength corresponds to the color Yellow"<< endl;

    cout << "You evauluated this many conditions: "<< g_counter << endl; 
}
++g_counter;
else (userinput > 570 && userinput <= 590){
    cout<< "Your wavelength corresponds to the color Orange"<< endl;
    
    cout << "You evauluated this many conditions: "<< g_counter << endl; 
}
++g_counter;
else ( userinput > 590 && userinput <= 700){
    cout<< "Your wavelength corresponds to the color red"<< endl;
    
    cout << "You evauluated this many conditions: "<< g_counter << endl; 
}
++g_counter;
else ( userinput > 700 ){
    cout<< "wavelength to large, try again"<< endl;

    cout << "You evauluated this many conditions: "<< g_counter << endl; 
}

return 0;
}

我的问题是我无法理解编译时遇到的错误。 错误:

Homework2.cpp: In function ‘int main()’:
Homework2.cpp:19:1: error: ‘else’ without a previous ‘if’
 else (num >= 400 && num <=445){
 ^
Homework2.cpp:19:31: error: expected ‘;’ before ‘{’ token
 else (num >= 400 && num <=445){
                               ^
Homework2.cpp:26:1: error: ‘else’ without a previous ‘if’
 else (num > 445 && num <= 475){
 ^
Homework2.cpp:26:31: error: expected ‘;’ before ‘{’ token
 else (num > 445 && num <= 475){
                               ^
Homework2.cpp:32:1: error: ‘else’ without a previous ‘if’
 else (num > 475 && num <= 510){
 ^
Homework2.cpp:32:31: error: expected ‘;’ before ‘{’ token
 else (num > 475 && num <= 510){
                               ^
Homework2.cpp:38:1: error: ‘else’ without a previous ‘if’
 else (num > 510 && num <= 570){
 ^
Homework2.cpp:38:31: error: expected ‘;’ before ‘{’ token
 else (num > 510 && num <= 570){
                               ^
Homework2.cpp:44:1: error: ‘else’ without a previous ‘if’
 else (num > 570 && num <= 590){
 ^
Homework2.cpp:44:31: error: expected ‘;’ before ‘{’ token
 else (num > 570 && num <= 590){
                               ^
Homework2.cpp:50:1: error: ‘else’ without a previous ‘if’
 else ( num > 590 && num <= 700){
 ^
Homework2.cpp:50:32: error: expected ‘;’ before ‘{’ token
 else ( num > 590 && num <= 700){
                                ^
Homework2.cpp:56:1: error: ‘else’ without a previous ‘if’
 else ( num > 700 ){
 ^
Homework2.cpp:56:19: error: expected ‘;’ before ‘{’ token
 else ( num > 700 ){
                   ^

例如,错误“Homework2.cpp:19:1: error: ‘else’ without a previous ‘if’”对我来说没有意义,因为前面有一个 if。此外,全局计数器(当程序在我搞砸之前运行时)一直给出 1 的答案,即使它实际上检查了更多比较。关于这些问题的任何指示都会很棒。

您的问题是 if/else 构造应该如下所示:

if (...) 
{ ... /* then case code */ }
else 
{ ... /* else case code */ }

“then case 代码”末尾的“}”和开始 else 分支的“else”之间没有任何内容。

在你上面的例子中,你在这两个组件之间有一个“g_counter++”,它没有形成有效的 if/else 结构。

else 命令必须立即 前面有一个if(){} 块。在 betwwen 中设置 g_counter 会使下一个 else 出错。

要计算比较次数,您可以使用 comma operator returns (E1,E2)

E2 的计算结果

所以你可以这样编码:

if (++g_counter, userinput < 400){
    cout << "Wavelength to small, try again"<< endl;
    
    cout << "You evauluated this many conditions: "<< g_counter << endl; 
}

else if ((++g_counter, userinput >= 400) && (++g_counter, userinput <=445)){
    cout<<  "Your wavelength corresponds to the color violet"<< endl;

    cout << "You evauluated this many conditions: "<< g_counter << endl; 
}

else....

注意使用&&时的括号(两个比较)