标题:该怎么清除cin内剩余的输入内容
只看楼主
gzy444
Rank: 1
等 级:新手上路
帖 子:15
专家分:7
注 册:2020-1-16
结帖率:100%
已结贴  问题点数:10 回复次数:11 
该怎么清除cin内剩余的输入内容
#include<iostream>
#include<string>
using namespace std;
const int strsize = 100;
struct bop {
    string fullname;
    char title[strsize];
    string bopname;
    int preference;  //0表示fullname,1表示title,2表示bopname
};
int main() {
    bop a[5] = {
        { "张三","金蝉子","唐僧",1 },
        { "李四","石猴","孙悟空",2 },
        { "王五","小白龙","敖烈",1 },
        { "赵六","天蓬元帅","猪八戒", 0},
        { "孙七","卷帘大将","沙和尚",1 } };
    char Xuanxiang;
    cout << "Benevolent Order of Programmers Report\n"
        "a. display by name          b. display by title\n"
        "c. display by bopname       d. display by preference\n"
        "q. quit\n";
        cout << "Enter your choice:";
        do {
            cin >> Xuanxiang;
            switch (Xuanxiang) {
            case 'a': for (int i = 0; i < 5; i++)cout << a[i].fullname << endl;cout << "Next choice:"; break;
            case 'b': for (int i = 0; i < 5; i++)cout << a[i].title << endl; cout << "Next choice:"; break;
            case 'c': for (int i = 0; i < 5; i++)cout << a[i].bopname << endl; cout << "Next choice:"; break;
            case 'd': for (int i = 0; i < 5; i++) {
                if (a[i].preference == 1)cout << a[i].title << endl;
                else if (a[i].preference == 0)cout << a[i].fullname << endl;
                else if (a[i].preference == 2)cout << a[i].bopname << endl;
                } cout << "Next choice:"; break;
            case 'q':cout << "Bye!";  break;
            }
        } while ((Xuanxiang == 'a') || (Xuanxiang == 'b') || (Xuanxiang == 'c') || (Xuanxiang == 'd'));
        system("pause");
    return 0;
}

如上代码,a,b,c,d均能触发do while语句,但是如果输入abbb或者cdb之类“abcd”组成的字符串时怎么能让cin只读取第一位有效输入并把之后的输入舍弃,使下一次的cin能正常输入
搜索更多相关主题的帖子: cin 输入 cout case int 
2020-03-01 17:53
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
得分:4 
这个是不是可以用某函数库来做呀?
可能有bug,因为我也不确定它稳不稳定,至少。。。它输入后不会显示(你懂的)
在此之前先清加一个头文件:#include<conio.h>
程序代码:
char temp1;//声明“帐篷”变量,一般temp用于储存一些备份或一次性使用的值
while(1){//制造死循环
    if(kbhit()){//kbhit函数,检测是否按下键
        temp1=getch();//如果按下键,我们就用getch求出最后按了哪个键。
        break;//读入成功,跳出循环。
    }
}
//这个过程中,你直接打入字符就行了,不用打enter,这是kbhit函数的特性。
//接着就能直接调用temp1了。

2020-03-01 18:53
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:4 
https://zh.
2020-03-01 21:53
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:4 
好神奇啊,我发现我学到什么内容论坛里就会出现同样内容的题,还偏偏在我快要忘了的时候出现。。这种情况出现很多很多次了
我把我的笔记给你吧正好加深我的印象
你问的是关于输入输出的问题,我把我做的笔记总结一下
1,string和cin合用不能输入空格,你有没有遇到这样情况当你输入一个名字中间有空格然后再输入另一个名字发现不能输出了?
程序代码:
#include<iostream>
using namespace std;


int main()
{  string name;
cin>>name;//但是cin不可以用空格 王 非非
cout<<name;
string age;
cin>>age;//这里就打印不了了,接收的是非非
cout<<age;
   //wang fei。  
}

解决方案就是使用getline
getline (cin,name);

2,getline和cin合用又会出现问题,getline会读取\n符号
比如
程序代码:
include <string>
#include <iostream>

 
int main()
{
    std::cout << "Pick 1 or 2: ";
    int choice{};
    std::cin >> choice;

 
    std::cout << "Now enter your name: ";
    std::string name{};
    std::getline(std::cin, name);//不读
 
    std::cout << "Hello, " << name << ", you picked " << choice << '\n';

 
    return 0;
}
//Pick 1 or 2: 1结果
Now enter your name: Hello, , you picked 1

解决方案使用cin.ignore()

程序代码:
#include <limits>

 
...忽略无限字符,直到\ n被删除

 
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // ignore unlimited characters until a \n is removed
当然如果limit后面的一大堆如果看不懂的话,可以暂时不用懂啦,因为我也看不懂
可以这样用
std::cin.ignore(32767, '\n'); // ignore up to 32767//32767你如果看不懂可以吱一声,我拿计算器帮你算算



把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-01 23:37
gzy444
Rank: 1
等 级:新手上路
帖 子:15
专家分:7
注 册:2020-1-16
得分:0 
回复 4楼 叶纤
吱吱吱吱!
2020-03-02 14:02
gzy444
Rank: 1
等 级:新手上路
帖 子:15
专家分:7
注 册:2020-1-16
得分:0 
回复 2楼 return_0
看楼下版主发的那个
2020-03-02 14:03
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
得分:0 
其实也是,kbhit函数一直用于做小游戏,我印象中它挺好用的

2020-03-02 15:27
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
以下是引用gzy444在2020-3-2 14:02:02的发言:

吱吱吱吱!

不是让你真的吱一声,不过蛮有喜感的,char类型是1个字节,limit后面的max是求最大位数,1个字节的位数是256,2个字节的位数是65536,65536/2=32768,那32767=32768-1,我是觉的32767好记

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-02 16:35
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
得分:0 
拜托,,char类的一个普通变量占用的是四个字节,int占一个字节

2020-03-05 16:53
maomao12345
Rank: 2
来 自:五位神奇空间
等 级:禁止访问
威 望:2
帖 子:127
专家分:64
注 册:2020-3-23
得分:0 
回复 4楼 叶纤
std::cout不用这么麻烦,在头文件下面加一个using namespace std;就可以了。

一个快乐的小小孩
2020-03-24 09:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-499490-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.593657 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved