A better way would to be to read into a buffer using fgets, and then do something like:
scanf("%c%c %d", &grade, &suffix, &credits);
The next problem you have is here, and this is your main problem:
switch( toupper( buffer ) )
case 'A': ... break;
case 'F': ... break;
default: message about an invalid grade...
if( buf == '+' )
if( buf == '-' )
This should be, at the very least, done this way:
while !(grade == SENTINEL && credits == SENTINEL)
You need parenthesis around the true/false statement.
while( !(grade == SENTINEL && cretids == SENTINEL) )
And finally, you can't subtract decimal ammounts from a character. You should be using a double or float and giving that the value.
Try that on for size and see what you come up with. Oh, and you likely want "#include <stdio.h>" instead of with quotes.
double grade = 0.0;
case 'A': grade = 4.0; break;
if( ...plus suffix... )
grade += 0.33;