最近在做实习的Demo时,遇到了一个问题。
std::string commond;
char task_flag;
printf(" -----------(普通用户)指令表-------------\n");
printf(" 指令号 功能 \n");
printf(" 0: 查询余额\n");
printf(" 1: 查询合约\n");
printf(" 2: 查询持仓\n");
printf(" 3: 开始交易\n");
printf(" 4: 退出\n");
printf(" 请输入指令号:");
std::cin >> task_flag;
fflush(stdin);
switch (task_flag) {
case '0':
commond = "find_money";
printf("查询余额\n");
break;
case '1':
commond = "find_contract";
printf("查询合约\n");
break;
case '2':
commond = "hold_position";
printf("查询持仓\n");
break;
case '3':
commond = "bidding";
printf("开始交易\n");
break;
case '4':
commond = "exit";
printf("已退出\n");
break;
default:
commond = "erro";
printf("非合法操作·········\n");
break;
}
return commond;
主要就是输入的如果是字符串的话,这段代码会重复输出几次(取决于字符串的长度),因为cin是流.
注意:只有在输入完数据再按回车键后,该行数据才被送入键盘缓冲区,形成输入流,提取运算符“>>”才能从中提取数据。需要注意保证从流中读取数据能正常进行。
如果把task_flag 改成字符串,就没有这个问题,如果改成数字,那循环次数是随机的。
在cin>>task_flag;之后加一句 fflush(stdin);清空键盘缓冲区,就是只让头一个字符赋值给了task_flag,其他的没有机会,直接清空了。
基础没打好,还是思维盲点呢?
-------------------------------------------------------------------------
ps:
int main(void) {
char c;
cin >> c;
while (c != 'x'){
cout << c << endl;
cin >> c;
}
system("pause");
return 0;
}
cin 代表从缓冲区读了几个字符,这里是读了一个字符,如果你输入abcx,那么会打印出
a
b
c
以前之所以没遇到这个问题,是因为cin用的比较简单也比较固定,就是输入一个数字或字符串,现在是字符流,问题凸显了。
浙公网安备 33010602011771号