关于cin,getline一起出现无法正常输入的问题

int N;
    char c;
    int num=0;
    string s;
     cin>>N>>c;

     getline(cin,s,'\n');
     for(int i=0; s[i]!='\0';i++)
     {
         num++;
     }
     cout<<num<<endl;

 

这时cin(输入流)的状态被标志为遇到文件结尾,如果不调用in.clear()或其他可以清除流的状态的函数来将清除cin的状态,则cin被标志为遇到文件结尾的状态一起保持。到第二个 getline(cin, line)再次引用cin,则此时的cin的状态为遇到文件结束标志,无法输入,因此num始终为0;

一.调用clear()来清除cin的状态

二.cin.flush();

三.cin.ignore();

总有一款适合你……尝试了好多次,终于可以了!

string word;
// read until end-of-file, writing each word to a new line
cout<<"\nNow you can input as many words as you can. If you want to terminate, you may press Ctrl+z:\n";
while (cin >> word)
cout << word << endl;

cin.clear();//调用clear()来清除cin的状态

string line;
// read line at time until end-of-file
cout<<"\nNow you can input as many lines of words as you wish. To terminate, please press Ctrl+z:\n";
while (getline(cin, line))
cout << line << endl;
cin.clear();

keep_window_open();

转载于:https://www.cnblogs.com/lyqf/p/8614359.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值