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....
注意使用&&
时的括号(两个比较)
所以我的总体目标是制作一个程序,显示与用户输入的波长数相关的颜色(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....
注意使用&&
时的括号(两个比较)