-4

i have an assignment which needed me to receive grade input by user..then display it with the grade point..my problem is with the A-,B+,C+ grade..which is the grade which got symbol after it..how do i solve this problem ? how to make it understand ?

this is my code..

`

printf("Please enter grade :");
    scanf(" %c",&grade1);

    if(grade1=='A')
        grade_point1=4.0;
    else if(grade1=='A-')
        grade_point1=3.67;
    else if(grade1=='B+')
        grade_point1=3.33;
    else if(grade1=='B')
        grade_point1=3.00;
    else if(grade1=='B-')
        grade_point1=2.67;
    else if(grade1=='C+')
        grade_point1=2.33;
    else if(grade1=='C')
        grade_point1=2.00;
    else if(grade1=='C-')
        grade_point1=1.67;
    else if(grade1=='D+')
        grade_point1=1.33;
    else if(grade1=='D')
        grade_point1=1.00;
    else if(grade1=='F')
        grade_point1=0.00;
    printf("%c %.2f",grade1,grade_point1);
}

2 Answers2

1

Consider using the standard library instead of confining to C functions.

A character can only consist of 1 character. So, to represent an A- you'll need a string. This is an Array of characters.

std::cout << "Please enter grade:\n";

std::string grade;
std::getline(std::cin, grade);

if(grade == "A")
{
    grade_point1=4.0;
}
else if(grade == "A-")
{
    grade_point1=3.67;
}
...etc

EDIT:

std::cout.precision(2);
std::cout << grade << ' ' << std::fixed << grade_point1 << std::endl;

Seeing OP changed tag to C:

Use function from this answer

char *grade;
printf("Please enter grade: ");

grade = getline();

if(strcmp(grade, "A") == 0)
{
    grade_point1=4.0;
}
else if(strcmp(grade, "A-") == 0)
{
    grade_point1=3.67;
}
etc...

free(grade);
Community
  • 1
  • 1
Neijwiert
  • 985
  • 6
  • 19
0
  1. You read the character instead of reading the string
  2. You can not compare strings in C with operator ==. User strcmp() instead.

EDIT

  1. String literals are enclosed in double quotes.
Alex
  • 9,891
  • 11
  • 53
  • 87