我正在使用C ++ Primer进行练习,基本上我使用switch语句来计算我输入的文本中的元音数量。
我使用while循环输入文本。
while(cin >> ch)
并继续处理案例,a,e,i,o,u,为各个案例递增一个整数变量。现在问题的下一部分也说明了空格,制表符和换行符。
我试过
case ' ':
等等使用'\ t'和'\ n'。但似乎它没有计算这些情况。我还尝试使用默认值并使用if else语句
default:
if(ch == ' ')
++space;
等。但这也没有进行。我也尝试输入'','\ t','\ n'的整数值。我在这做错了什么?另外,我知道如果我使用isspace(),我可以计算总数,但我需要单独计算每一个。我不确定为什么平等测试不会起作用。
答案 0 :(得分:12)
默认情况下,来自流的格式化输入会跳过前导空格。您需要禁用跳过前导空格或使用其中一个不会跳过空格的函数:
std::cin >> std::noskipws; // disables skipping of leading whitespace
char c;
while (std::cin.get(c)) { // doesn't skip whitespace anyway
...
}
答案 1 :(得分:1)
正如Dietmar所说,默认情况下会跳过空格。您可以使用cin.getline()提供自己的字符串分隔符,而不是空格字符。我会说,与使用cin.get()
相比,这通常更容易阅读输入。