当前位置:编程学习 > C/C++ >>

c和c++的输入流

#include <iostream.h>
int main()
{
    const int ArSize=20;
    char name[ArSize];
    char dessert[ArSize];
    cout<<"Enter your name:\n";
    cin<<name;
    cout<<"Enter your favorite dessert:\n";
    cin<<dessert;
    cout << "I have some delicious "<<dessert<<"  for you," <<name<< ".\n";
    return 0;
}

这里面用到cin流输入,但是存在点问题。

cin.getline和cin.get(str,x)区别在那?

追问:额,悲剧,没注意。

答案:以下内容来自: http://yanger2004.ycool.com/post.2831191.html

相同点:
要获取一行的输入,标准流类的成员函数getline(),get()都有三个参数,比如getline(char*line,int size,char ='/n')。其中第一个参数指向存储结果字符的缓冲区指针,第二个表示缓冲区大小(本次读取的最大字符个数,不能够超过其限度),第三个表示知道什么时候停止读输入的终止符(读取一行结束的标志)。终止符有一个经常用到的缺省值"/n"。两个函数遇到输入终止符时,都把零储存在结果缓冲区里。
不同点:

2.在处理字符串时,get()遇到输入流的分隔符时就停止,而不从输入流中提取分隔符。比如用cin.get(myarray1,30,'*');处理字符串1111*2222,碰到*就停止。cout<<myarray1;会输出1111。然后再调用cin.get(ch1),cout<<ch1;输出的还是这个分隔符*。getline()与其相反,它从输入流中提取分隔符,但仍没有把它储存在结果缓冲区里。如果用cin.getline(myarray2,30,'*');处理上面同样的字符串1111*2222,碰到*停止。cout<<myarray2;会输出1111。然后再调用cin.get(ch2),cout<<ch2;输出的是分隔符后面的2。

以下内容来自

http://hi.zhaoxi.net/xystephen/blog/item/5c48402422902932c9955950.html

istream中的类提供了一些面向行的类成员函数;getline()和get()。这两个函数都读取一行输入,直到到达换行符。然而,随后getline()将丢弃换行符,而get()将换行符保留在输入序列中。

getline()程序举例

#include<iostream>
using namespace std;
const int ArSize = 20;
int main()
{

 char name[ArSize];

 char dessert[ArSize];

 cout<<"Eenter your name:"<<endl;

 cin.getline(name,ArSize);

 cout<<"Eenter your favorite dessert"<<endl;

 cin.getline(dessert,ArSize);

 cout<<"I have some delicious"<<dessert;

 cout<<"for you"<<name<<"./n";

 return 0;

}

在使用 get()时应该注意 get()是将换行符保留在输入序列中,假使我们连续两次调用get()那么第二次调用时看到的第一个字符便是换行符。因此get()认为已到达行尾,而没有发现任何可读取的内容。我们可以使用不带任何参数的cin.get()调用来读取下一个字符,为读取下一行输入做好准备。

cin.get(name,ArSize);

cin.get();

cin.get(dessert,ArSize);

另外一种使用get()的方式是将两个类成员函数拼接起来;

cin.get(name,ArSize).get();

 

程序例子

#include<iostream>
using namespace std;
const int ArSize = 20;
int main()
{
 char name[ArSize];

 char dessert[ArSize];

 cout<<"Eenter your name:"<<endl;

 cin.get(name,ArSize).get();

 cout<<"Eenter your favorite dessert:"<<endl;

 cin.get(dessert,ArSize).get();

 cout<<"I have some delicious"<<dessert;

 cout<<"for you"<<name<<"./n";

 return 0;

}

当getline()和get()读取空行时;

get()读取空行后会将设置失效位。这意味接下来的输入将被阻断;但可以使用下面的命令来恢复输入

cin.clear();

另一个潜在的问题,输入字符串可能比分配的空间长。如果输入行包含的字符数比指定的多,则getline()和get()将把余下的字符留在输入队列中,而getline()还会设置失效位,并关闭后面的输入。

cin >>

尖是向右的

getline 和get只相差line其含义是你键盘输入值敲了回车后,有line几自动换到下一行,没有的就继续在输入那行后面继续显示

上一个:visual c++怎么详细的使用方法或者视频
下一个:C++能做些什么事?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,