2016-11-12 11 views
-1

更新: 最後のif文if(lettergrade <= 'A' && lettergrade >= 'F')は、F(70)のASCII値がA(65)より大きいため正しくありません。 C - 関数から返されたcharを出力します。

私はC.

にMy機能、assignletterを関数によって返された文字を印刷しようとしている、フロートを与えられ、そして文字を返しています。

であるように私はプログラムを実行すると:

skirchbaum:~/workspace/HMWK/HMWK4 $ ./assignletter 
Enter pointsgrade 
100 
Pointsgrade: 100.00 Lettergrade: 

何もlettergradeのために印刷されません取得します(私が試してみました複数のケース - 100.1、1、など)私が間違っているのは何

CODE:

/* Input: a grade as points 
    Functionality: converts point grade into letter grade 
    Output: a char representing the letter grade, or -1 if error 

    LETTER GRADE BREAKDOWN: 
    A = 100 - 91 
    B = 90 - 81 
    C = 80 - 71 
    D = 70 - 61 
    F = 60 and below 
*/ 


#include <stdio.h> 
#include <stdlib.h> 
#define DEBUG 1 

char assignletter(float pointsgrade); 

char lettergrade; 
float pointsgrade; 

int main(){ 
    //Input a pointsgrade for debugging 
    #ifdef DEBUG 
    printf("Enter pointsgrade\n"); 
    scanf("%f", &pointsgrade); 
    lettergrade = assignletter(pointsgrade); 
    printf("Pointsgrade: %.2f Lettergrade: %c\n", pointsgrade, lettergrade); 
    #endif 
} 

char assignletter(float pointsgrade){ 

    char lettergrade; 

    //Grade A 
    if(pointsgrade <= 100 && pointsgrade >= 91){ 
     lettergrade = 'A'; 
    } 

    //Grade B 
    if(pointsgrade <= 90 && pointsgrade >= 81){ 
     lettergrade = 'B'; 
    } 

    //Grade C 
    if(pointsgrade <= 80 && pointsgrade >= 71){ 
     lettergrade = 'C'; 
    } 

    //Grade D 
    if(pointsgrade <= 70 && pointsgrade >= 61){ 
     lettergrade = 'D'; 
    } 

    //Grade F 
    if(pointsgrade <= 60){ 
     lettergrade = 'F'; 
    } 

    //Return letter grade or -1 if error 
    if(lettergrade <= 'A' && lettergrade >= 'F'){ 
     return lettergrade; 
    } 
    else{ 
     return -1; 
    } 
} 
+1

'lettegrade'は' 'A''以下でなければならず、' 'F ''以上でなければなりません。演算子を切り替える –

+0

しかし、AはFよりも高い値ではありませんか? @EliSadoff –

+1

「A」は「65」、「F」は「70」です。 –

答えて

1

条件がうまく形成されない、「F」はASCII 70であり、「A」はlettergrade(「A」)は以下であるとして65ので

if (lettergrade <= 'A' && lettergrade >= 'F') { 
    return lettergrade; 
} 

が真と評価されませんですそれ

より70(「F」)と大きくない、あなたはかなりの兆候

よりも、より大きく、少ないをひっくり返すことにより、このよう

if (lettergrade >= 'A' && lettergrade <= 'F') { 
    return lettergrade; 
} 

それを行うだろう

0

あなたはA(65)とF(70)との間のASCII値にlettergradeを割り当てます。

しかし、この条件では、値がA(65)より小さくF(70)よりも大きいかどうかを確認しています。

もちろん、lettergradeがA(65)とB(70)の間にあると(return)は評価されません。

は、余分なヒントとして

if(lettergrade >= 'A' && lettergrade <= 'F'){ 
     return lettergrade; 
    } 
    return -1; 

if(lettergrade <= 'A' && lettergrade >= 'F'){ 
     return lettergrade; 
    } 
    else{ 
     return -1; 
    } 

を交換し、私もelse声明を廃止することをアドバイスします。他のreturnステートメントが実行されていない場合にのみ、制御がreturn -1に達する理由です。

+0

それは何の違いもありません。試しましたか?あなたはそれを投票することを避けるためにあなたの答えを削除したいかもしれない – shakram02

+0

あなたは同じ答えを与えている!もう一度お読みください! –

+0

私はただちにもう一歩を即興し、無駄な文を削除しました。 –

関連する問題