所以我试着用C ++做一个成绩系统。例如,A +将给出4.0,A给出4.0,A-给出3.7。对于每个+ - 有0.3的差异。这是我的代码:
char grade_letter[3];
float value;
bool input = true;
do{
cout << "Enter letter grade : ";
cin>>grade_letter;
switch(grade_letter[0])
{
case 'A' : value = 4;
break;
case 'B' : value = 3;
break;
case 'C' : value = 2;
break;
case 'D' : value = 1;
break;
case 'E' : value = 0;
break;
}
if(grade_letter[1]=='+'){
value += 0.3;
}
else if (grade_letter[1]=='-'){
value -= 0.3;
}
if (input == true){
if(value > 4.0){
cout << "The numeric value is " << floor(value + 0.5) << endl;
}else if (value < 0.0){
cout << "Grade out of range. " << endl;
}else{
cout<< "The numeric value is " << value << endl;
}
}else {
cout << "Invalid input." << endl;
}
}while(input == false);
当我尝试A + A和A-时它起作用。但是,我尝试使用A =,A /,A *,结果仍显示每个等级的默认值。验证有问题。
如果我将布尔输入默认值设置为false,它只适用于A + A-等等,只要在输入中有&#39; s和 - 。我想使用字符串和子字符串来读取输入,但如果是这样,我将重新编码所有内容。
那么,有人可以帮助我验证吗?我尝试使用charAt检查char grade_letter的长度,但是出现了错误。
提前致谢。
答案 0 :(得分:2)
检查'+'
和'-'
后,您需要添加一个检查,其中没有其他字符:
if(grade_letter[1]=='+'){
value += 0.3;
}
else if (grade_letter[1]=='-'){
value -= 0.3;
} else if (grade_letter[1]!='\0'){
/* Error */
}
答案 1 :(得分:1)
您从未将input
设置为false
。在检查第二个字符是否else
后,您可能想要另一个-
吗?
input = false
答案 2 :(得分:1)
您需要进行以下更改:(1)在您的交换机中添加默认设置以将输入设置为false,(2)在检查+或 - 的if语句系列中添加else以便如果有除了字符串结尾之外的某些字符,输入将被设置为false,以及(3)在检查输入为真之后将+或 - 符号上的检查移动到。
char grade_letter[3];
float value;
bool input = true;
do{
cout << "Enter letter grade : ";
cin>>grade_letter;
switch(grade_letter[0])
{
case 'A' : value = 4;
break;
case 'B' : value = 3;
break;
case 'C' : value = 2;
break;
case 'D' : value = 1;
break;
case 'E' : value = 0;
break;
default:
input = false;
break;
}
if (input == true){
if(grade_letter[1]=='+'){
value += 0.3;
}
else if (grade_letter[1]=='-'){
value -= 0.3;
} else if (grade_letter[1]){
// something other than end of string so bad input
input = false;
}
if (input) {
if(value > 4.0){
cout << "The numeric value is " << floor(value + 0.5) << endl;
}else if (value < 0.0){
cout << "Grade out of range. " << endl;
}else{
cout<< "The numeric value is " << value << endl;
}
}
}
if (! input) {
// at some point we have bad input so let user know.
cout << "Invalid input." << endl;
}
}while(input == false);
答案 3 :(得分:0)
所以,你在验证中错过了两个地方。
首先,成绩信:
switch(grade_letter[0])
{
case 'A' : value = 4;
break;
case 'B' : value = 3;
break;
case 'C' : value = 2;
break;
case 'D' : value = 1;
break;
case 'E' : value = 0;
break;
default:
valid = false; // What we don't recognize is invalid
break;
}
然后是第二部分验证:
if (valid) // continue verification only if valid
{
switch(grade_letter[1])
{
case '+': value += 0.3; break;
case '-': value -= 0.3; break;
case ' ':
case '\0': break; // we assume space and EOL is OK
default: valid = false; break;
}
}