C , использующий цикл while

#c

#c

Вопрос:

Я пытаюсь написать программу на C для чтения строки введенного кода (например, плоская шляпа) и заставить программу выводить количество заглавных букв, содержащихся в коде. (в этом примере он должен был бы выводить 2). Я написал фрагмент кода, используя cin.get() но мой код не входит в цикл while. Пожалуйста, помогите мне. и, пожалуйста, измените только «мой код».

 #include <iostream> 
using namespace std; 

int main () 
{
    char y = 0; 
    int capitals = 0; 
    int flag = 0;

    cout << "Enter your line of words followed by a fullstop: "; 

    while (!flag == -1)
    {
        cin.get(y);
        if ((y >= 65) amp;amp; (y <= 90))
        {
             capitals = capitals   1; 
        }         

        if (y == 46)
        {        
            flag = -1; 
        }
    }

    cout << "Number of capitals equal is this line is: " << capitals << endl;
    return 0; 
}
  

Комментарии:

1. ого! Убедитесь, что вы сделали отступ в своем коде!

Ответ №1:

flag инициализируется значением 0, !flag следовательно, равно 1, и ваш цикл while никогда не вводится.

Вы могли бы исправить это с:

 while (!(flag == -1))
  

или

 while (flag != -1)
  

Ответ №2:

Вместо !flag == -1 использования flag != -1 .

! является унарным логическим оператором NOT и !0 равен 1, а не -1.

Комментарии:

1. Или, еще лучше, избавьтесь от flag и используйте y != '.'

Ответ №3:

Вы пробовали это?

 while (!(flag == -1))
  

или

 while (flag != -1)
  

Ответ №4:

Я думаю, вам нужно while (!(flag == -1)) … но было бы лучше написать while (flag != -1) . ! Оператор имеет более высокий приоритет, поэтому он вычисляется раньше == . Также вам следует попробовать использовать isupper() для проверки заглавных букв — не изобретайте велосипед.

Ответ №5:

Я думаю, что ошибка заключается в приоритете оператора. !flag == -1 эквивалентно (!flag) == -1 . Попробуйте flag != -1 .

Ответ №6:

Если вы простите, вероятно, слишком полный ответ на вероятный вопрос домашнего задания:

 while (cin >> y amp;amp; y != '.')
    capitals  = (bool)isupper(y);