我正在尝试编写一个c ++程序来读取一行输入代码(例如,Hat是平的)并让程序输出代码所具有的大写字母数。 (在这个例子中,它必须输出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) && (y <= 90))
{
capitals = capitals + 1;
}
if (y == 46)
{
flag = -1;
}
}
cout << "Number of capitals equal is this line is: " << capitals << endl;
return 0;
}
答案 0 :(得分:4)
flag
初始化为0,因此!flag
为1,永远不会输入您的while循环。
您可以通过以下方式解决此问题:
while (!(flag == -1))
或
while (flag != -1)
答案 1 :(得分:2)
而不是!flag == -1
使用flag != -1
。
!
是一元逻辑NOT运算符,!0
是1,而不是-1。
答案 2 :(得分:0)
你试过这个吗?
while (!(flag == -1))
或
while (flag != -1)
答案 3 :(得分:0)
我认为你需要while (!(flag == -1))
...但最好是写while (flag != -1)
。 !
运算符具有更高的优先级,因此在==
之前进行评估。
此外,您应该尝试使用isupper()
来测试大写 - 不要重新发明轮子。
答案 4 :(得分:0)
我认为错误是运算符优先级。 !flag == -1
相当于(!flag) == -1
。试试flag != -1
。
答案 5 :(得分:0)
如果你原谅了一个可能太完整的回答可能的家庭作业问题:
while (cin >> y && y != '.')
capitals += (bool)isupper(y);