#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);