Пока циклы и вложены, если не работают вместе - PullRequest
0 голосов
/ 17 января 2020

Когда l oop отсутствует, код работает нормально. Потому что он не работал, который последний еще на вложенном, если. Государственные деятели являются «недопустимым персонажем». Но, как указано ниже, он не работает. Где ошибка? Я пытался удалить циклы пока. И это побежало. Но так, это не работает. На мой взгляд, эта ситуация является специфическим c условием того времени, когда l oop.

#include <stdio.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

        if(grade == 'A'|| grade == 'a')
        {
            ++aCount;
        }
        else if(grade == 'B' || grade == 'b')
        {
            ++bCount;
        }
        else if(grade == 'C' || grade == 'c')
        {
            ++cCount;
        }
        else if(grade =='D' || grade == 'd')
        {
            ++dCount;
        }
        else if(grade == 'F' || grade =='f')
        {
            ++fCount;
        }
        else
        {
            puts("invalid character");

        }

   }//while





   // output summary of results
   puts("\nTotals for each letter grade are:");
   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;
} 

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Нет проблем с использованием 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;
} 
0 голосов
/ 17 января 2020

'\ n' также считается символом, как и ''. Все, что вы никогда не проверяете на наличие этого символа. Вот код:

#include <stdio.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; 


    while (( grade = getchar()) != EOF  ) { 

        if(grade == 'A'|| grade == 'a')
        {
            ++aCount;
        }
        else if(grade == 'B' || grade == 'b')
        {
            ++bCount;
        }
        else if(grade == 'C' || grade == 'c')
        {
            ++cCount;
        }
        else if(grade =='D' || grade == 'd')
        {
            ++dCount;
        }
        else if(grade == 'F' || grade =='f')
        {
            ++fCount;
        }
        else if(grade =='\n' || grade==' ')
        {
            continue;

        }
        else
        {
        puts("invalid character");
        }
   }


   puts("\nTotals for each letter grade are:");
   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;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...