注册 登录
编程论坛 C++教室

还是关于getline()

Cmoniker 发布于 2010-05-10 22:06, 628 次点击
由于对getline()函数一直不解,在论坛里找了个关于getline()例子 稍微改了改  结果又出问题了
#include<iostream>
using namespace std;
int main()
{
    char mystr[100];
    int n,i;
    cin>>n;
    for(i=0;i<n;i++)
    {
    cout<<"what's your name? ";
    cin.getline(mystr,100);
    cout<<"Hello "<<mystr<<".\n";
    cout<<"what is your favorite color? ";
    cin.getline(mystr,100);
    cout<<"I like "<<mystr<<" too!\n";
    }
    return 0;
}
例如:
先输入1付给n;
然后它就直接输出:
what's your name?
what is your favorite color?
这两句连着输出了  为什么呀?

5 回复
#2
Cmoniker2010-05-10 22:30
  希望高手不吝赐教!
#3
mghxz2522010-05-11 00:53
我的也是这样,不明白!!!!!!
#4
yc25757572010-05-11 10:24
#include<iostream>
using namespace std;
int main()
{
    char mystr[100];
    int n,i;
    n = 0;
    cin>>n;
    for(i=0;i<n;i++)
    {
    cout<<"what's your name? ";
    getchar();//这里接收那个回车符号!!
    cin.getline(mystr,100);
    cout<<"Hello "<<mystr<<".\n";
    cout<<"what is your favorite color? ";
    cin.getline(mystr,100);
    cout<<"I like "<<mystr<<" too!\n";
    }
    return 0;
}
#5
最近不在2010-05-11 10:38
cin.getline()会将回车的换行符作为输入的结束。并用空值字符替换换行符,因此对下一次使用cin.getline()不会有影响。但是你while循环里面最后又个cin>>i;
那么当这次循环完,下一次循环用cin。getline()会读取上一次的输入完i后的换行符。解决这一问题的方法,就是用cin。get()读取换行符(enter),然后用cin。getline。
程序代码:
#include <iostream>
using namespace std;
int main()
{
   
    int n;
    //cin>>n;
        
//cin.get();
    char a[20];
   
    cin.getline(a,20);
    cout<<a;
    return 0;
}
注意看有无引去代码的区别
#6
Cmoniker2010-05-11 22:56
谢谢 我明白了 我加了个getchar()  发现也能解决问题!
1