字符串输入的问题

永远的明日 2009-06-02 12:16:30
代码如下,输入一行字符串,接着输入一整数,再输入字符串
输入整数后,就直接输出一空行(个人理解是缓冲区有'\n',所以第二个getline输入了一个'\n')
怎样解决类似的问题呢?是刷新缓冲区还是???

#include<iostream>
using namespace std;
void main()
{
char test[50];
int a;
cin.getline(test,50);
cin>>a;
cin.getline(test,a);
cout<<test<<endl;
system("pause");


}


...全文
135 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
donle1000 2009-06-03
  • 打赏
  • 举报
回复
良好的习惯是在每个cin后面加上一句cin.ignore();


#include<iostream>
using namespace std;
void main()
{
char test[50];
int a;
cin.getline(test,50);
cin>>a;
cin.ignore();
cin.getline(test,a);
cout<<test<<endl;
system("pause");


}

飞天御剑流 2009-06-02
  • 打赏
  • 举报
回复
你的问题在于cin>>a;这里留了一个\n在缓冲里,这个\n被cin.getline读取了,结果getline就读了空行,

在cin >> a;后面加一句cin.sync()清空缓冲区就行,或者直接(cin >> a).get();也行。
永远的明日 2009-06-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lingyin55 的回复:]
你说的回车应该是这里的吧
cout < <test < <endl;
把endl去掉试试。
[/Quote]
我的意思是输入一字符串,回车,输入整数,回车
然后无法输入下一个字符串,直接输出空行
我想请问一个如何可以继续输入字符串,是要先刷新缓冲区还是怎样???
lingyin55 2009-06-02
  • 打赏
  • 举报
回复
你说的回车应该是这里的吧
cout<<test<<endl;
把endl去掉试试。
shuashua0 2009-06-02
  • 打赏
  • 举报
回复
这个程序能做什么呢,最后输出的不还是最后输进去的 test吗
adventurelw 2009-06-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 adventurelw 的回复:]
C/C++ codecin>>a;
cin.getline(test,a);while(cin.get()!='\n')continue;//其实这里单独一个cin.get();语句就足够了,前面那个语句是删除掉所有不需要的输入的。
[/Quote]

位置错了。。。。。

cin>>a;
while(cin.get()!='\n')
continue;
cin.getline(test,a);
adventurelw 2009-06-02
  • 打赏
  • 举报
回复

cin>>a;
cin.getline(test,a);
while(cin.get() != '\n')
continue;//其实这里单独一个cin.get();语句就足够了,前面那个语句是删除掉所有不需要的输入的。
  • 打赏
  • 举报
回复
如果缓冲区里有卡数据,就刷新一下啊

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧