在写统计单词个数时发现了一个问题,单独运行是没问题的,但是放在switch中,它会直接“跳过”我从键盘上输入字符的步骤。如图:
#include<iostream>
#include<string>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
void countword()
{
char str[100];
cout << "输入一句英文:" << endl;
int i = 0;
int word = 1;
cin.getline(str, 100);
while (str[i] != '\0') {
if (str[i] == ' ') {
word++;
}
i++;
}
if (str[0] == '\0') {
word--;
}
cout << "单词个数为" << word << endl;
return;
}
int main()
{
int start = 0;
cin >> start;
switch (start)
{
case 1:
countword();
break;
};
return 0;
}
在试了几种输入方式之后,我觉得这应该是缓存区中有残留字符,于是想cin.get()先舍弃一波。
cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足.
如图:
void countword()
{
char str[100];
cout << "输入一句英文:" << endl;
int i = 0;
int word = 1;
cin.get();
cin.getline(str, 100);
while (str[i] != '\0') {
if (str[i] == ' ') {
word++;
}
i++;
}
if (str[0] == '\0') {
word--;
}
cout << "单词个数为" << word << endl;
return;
}
可以看到,这个方法是可行的。
然后我又想试试这个函数
函数名: fflush
功 能: 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时
头文件:stdio.h
原型:int fflush(FILE *stream)
其中stream是要冲洗的流
fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃[非标准],一般用不到。
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上
printf("字符串");后面加fflush(stdout);可提高打印效率!
结果不行,唉。为什么呢?