模板<>不工作或不工作

时间:2015-04-16 03:56:41

标签: c++ templates

这是我遇到问题的代码似乎在逻辑上工作但也许我错过了一个小细节,因为它不适用于字符或整数。 每当我运行它时,我得到奇怪的输出,就像所有的F或所有的As。

#include <iostream>
template<class T>
char gradeIt(T mark,T maxMark){
    T grade =(mark/maxMark)*100;
    if(grade > 79)
        return 'A';
    else if(grade<=79 && grade >= 69) {
        return 'B';
    }
    else if(grade<=69 && grade>59)
        return 'C';
    else if(grade>50 && grade <=59)
        return 'D';
    else 
        return 'F';
}   
template<>
char gradeIt<char>(char mark,char maxMark){
    return mark;

}

3 个答案:

答案 0 :(得分:4)

  

T grade =(mark / maxMark)* 100;

当模板参数Tint时,这将执行整数除法。例如,80/100 = 0.

你可以改为。

T grade = mark * 100 / maxMark;

答案 1 :(得分:1)

看起来像是

(mark/maxMark)*100

执行整数除法,每次都会舍入为0。

您应该static_cast<double>(mark)/maxMark首先转换为浮点数,这样您就不会丢失小数点后的任何数字。

答案 2 :(得分:0)

这不是你想要的整数。

T grade =(mark/maxMark)*100;

在整数除法的情况下(int和char在此中具有相同的行为)maxMark大于mark然后结果将为0.

例如

int x = 100;
int y = 5;
int z = y/x;
assert(z==0);