6

我在 C++ Primer 中做一个练习,基本上我正在使用 switch 语句来计算我输入的文本中元音的数量。

我使用 while 循环输入文本。

while(cin >> ch)

并继续处理案例a、e、i、o、u,为各个案例增加一个整数变量。现在问题的下一部分说还要计算空格、制表符和换行符。

我试着做

case ' ':

等等使用'\t'和'\n'。但它似乎没有计算这些情况。我还尝试使用默认值并使用 if else 语句

default:
    if(ch == ' ')
        ++space;

等等。但这也没有进行。我还尝试输入'','\t','\n'的整数值。我在这里做错了什么?另外,我知道如果我使用 isspace() 我可以计算总和,但我需要单独计算每个。我不确定为什么平等测试不能完成这项工作。

4

2 回答 2

12

默认情况下,来自流的格式化输入会跳过前导空格。您需要禁用跳过前导空格或使用不会跳过空格的函数之一:

std::cin >> std::noskipws; // disables skipping of leading whitespace
char c;
while (std::cin.get(c)) {  // doesn't skip whitespace anyway
   ...
}
于 2013-08-25T04:28:23.943 回答
1

正如 Dietmar 所说,默认情况下会跳过空格。您可以使用cin.getline()来提供您自己的字符串分隔符,而不是空白字符。我想说,与使用cin.get().

于 2013-08-25T04:35:59.060 回答