cin,cin.getline为何不能共同使用.

lliushine 2003-07-23 12:34:15
下面的代码,我在输入n的值后,只能再输入一字符串,
而且它是赋给了q,不知为何?

#include<iostream.h>
#include<iomanip.h>
void main()
{
char *p=new char[50];
char *q=new char[50];
int n;
cout<<"Enter a number:";
cin>>n;
cin.getline(p,50,'\n');
cin.getline(q,50,'\n');
cout<<"p= "<<p<<endl;
cout <<"q= "<<q<<endl;
}
...全文
99 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaitree 2003-07-25
  • 打赏
  • 举报
回复
可是下面得情况又是什么原因呢?

#include <iostream.h>

int main()
{
int tmp;
for(int i=0; i<5; i++)
{
cout<<"input a int:";
cin>>tmp;
cout<<"now tmp="<<tmp<<"\n";
}
return 0;
}

运行结果
input a int:1 \n<---按回车键 这时buffer 里面应该也是 "1 \n"吧,那么为什么
now tmp=1 下一个cin可以正常进行,而不用先清空buffer呢?
input a int:2
now tmp=2
input a int:3
now tmp=3
input a int:4
now tmp=4
input a int:5
now tmp=5
maxcai 2003-07-23
  • 打赏
  • 举报
回复
Enter a number:123 456
7893
p= 456
q= 7893
Press any key to continue
xueweizhong 2003-07-23
  • 打赏
  • 举报
回复
输入n的之后, 你需要回车,cin >> n; 调用才能返回。
加入你输了:
Enter a number: 1 \n<---按回车键
这时buffer = "1 \n";
cin >> n; 返回后-----> n = 1, buffer = " \n";
cin>>getline(...)后---> buffer = ""; p = " ";
然后再调用
cin>>getline(q, 50, '\n')后, 因为buffer为空,需要用户
再次输入,假如你输入了
"This is q\n"
这时buffer = "This is q\n"--> q = "This is q";--->
cin>>getline(q,...)返回, buffer="";

接着就有了你看到的结果。

解决的办法很简单:在
cin >> n;
后添加如下一行代码即可:
cin >> ws;

---keep on, just do it better.

69,394

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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