2010-11-20 7 views
2

Hey les gars, j'essaye d'écrire un programme qui calcule le GPA d'un étudiant. Pour quelque raison le compilateur me donne une erreur en comparant deux chaînes, mais je ne peux pas sembler trouver les raisons. Ci-dessous vous trouverez le morceau de code qui me donne une erreur. J'apprécierais vraiment que quelqu'un puisse m'aider à le comprendre.En comparant une chaîne avec un caractère en C++

ERREUR: Impossible de convertir 'std :: string' à 'const char *' pour argument '1' à 'int strncmp (const char *, const char *, size_t)'

double StudentInfo::getGPA() { 
double temp = 0; 
for(int i = 0; i < totalCourses; i++) { 
    if(strncmp(Courses[i].getGrade(), "A") == 0) //Gets string "grade", and compares it to "A". 
     temp = temp + 4; 
    if(strncmp(Courses[i].getGrade(),"A-", 2) == 0) 
     temp = temp + 3.7; 
    if(strncmp(Courses[i].getGrade(), "B+", 2) == 0) 
     temp = temp + 3.3; 
    if(strncmp(Courses[i].getGrade(), "B") == 0) 
     temp = temp + 3; 
    if(strncmp(Courses[i].getGrade(), "B-", 2) == 0) 
     temp = temp + 2.7; 
    if(strncmp(Courses[i].getGrade(), "C+", 2) == 0) 
     temp = temp + 2.3; 
    if(strncmp(Courses[i].getGrade(), "C") == 0) 
     temp = temp + 2; 
    if(strncmp(Courses[i].getGrade(), "C-") == 0) 
     temp = temp + 1.7; 
    if(strncmp(Courses[i].getGrade(), "D+") == 0) 
     temp = temp + 1.3; 
    if(strncmp(Courses[i].getGrade(), "D") == 0) 
     temp = temp + 1; 
    else 
     temp = temp + 0; 
} 
GPA = temp/totalCourses; 
return GPA;} 
+0

Je ne sais pas c'est votre erreur, mais la plupart de vos lignes de strncmp manque le troisième argument (donnant la longueur à comparer) –

Répondre

9

Vous faites pas besoin d'utiliser strncmp pour cela. Si vous voulez l'égalité de chaîne que vous pouvez écrire du code comme ceci:

if (Courses[i].getGrade() == "A") 
// ... 

modifier Notez que cela fonctionne pour std::string parce qu'il a une surcharge operator==

+0

Merci BEAUCOUP – Daniel

2

getGrade() chaîne de retour dont vous avez besoin alors de cours [i] .getGrade(). c_str()

1

utilisez Courses[i].getGrade().c_str() cela renvoie char* (const char*) de chaîne tampon.

1

Je voudrais essayer:

if(strncmp(Courses[i].getGrade().c_str(), "A") == 0) 
+0

Vous utilisez la signature 'strcmp' -' strncmp' attend un troisième argument qui spécifie le nombre de caractères pour limiter la comparaison. – birryree

0

Je voudrais juste Ressaisissez votre fonction getGrage() être

float getGrade(){ 
    float grade = 1 + 'D' - toupper(grade[0]); 
    if (grade < 1 || grade > 4) 
     return 0; 
    if (grade[1] == '+') return grade + 0.3; 
    if (grade[1] == '-') return grade - 0.3; 
    return grade; 
}; 
Questions connexes