Нет проблем с использованием if
внутри `while.
Как упоминалось в комментарии, пробелы и символы новой строки между оценками заставят его напечатать" Недопустимый символ ". Вы должны просто игнорировать эти символы, а не печатать сообщение.
Значение l oop заканчивается, когда пользователь вводит символ EOF в начале строки.
#include <stdio.h>
#include <ctype.h>
int main(void)
{
unsigned int aCount = 0;
unsigned int bCount = 0;
unsigned int cCount = 0;
unsigned int dCount = 0;
unsigned int fCount = 0;
puts("Enter the letter grades." );
puts("Enter the EOF character to end input." );
int grade; // one grade
// loop until user types end-of-file key sequence
while (( grade = getchar()) != EOF) { //while
grade = tolower(grade);
if(grade == 'a')
{
++aCount;
}
else if(grade == 'b')
{
++bCount;
}
else if(grade == 'c')
{
++cCount;
}
else if(grade == 'd')
{
++dCount;
}
else if(grade =='f')
{
++fCount;
}
else if (isspace(grade)) {
// ignore whitespace
}
else
{
printf("invalid character '%c'\n", grade);
}
}//while
// output summary of results
puts("\nTotals for each letter grade are:\n");
printf("A: %u\n", aCount);
printf("B: %u\n", bCount);
printf("C: %u\n", cCount);
printf("D: %u\n", dCount);
printf("F: %u\n", fCount);
return 0;
}