对字符数组的读取

小结

cin以空格,tab,换行位结束,并残留在缓冲区,scanf(读单个字符)会读取空格

in.txt:I am a stduent
while(scanf("c",&ch))cout<<ch;
输出:I am a stduent
while(cin>>ch)cout<<ch;
输出:Iamastduent

C中的函数:fget(c,size,stdin),遇换行符停止,会读入换行符,并会自动添加’\0’

C语言函数:fflush(stdin)清空缓存区,回车键之前的都属于同一个缓存区

2, cin.get():只能char[],无法string

  • 读取单个字符可读取空格,换行等,并以换行结束。
  • 读取数组时,cin.get(ch,4); cin.get(); cin.get(ch2,3)可控制读取个数,但是将换行符留在缓冲区中,故要使用cin.get()吃掉。

3,cin.getline()少用不太会,只能char[],和2的区别是会清除回车,可以用2代替

4,getline(cin,s,’#’):只能string,不能char[],遇换行符停止,并丢弃换行符,可以加参数以‘#’停止

5,读取一个文本,并按原样输出(即保留换行),

fre;
while((ch=getchar())!=EOF){
	cout<<ch;
}
//输入:
asd 
asdas

as
//输出
asd 
asdas

as



一、cin>>

cin>>在开头遇到结束符时会忽略,下次遇到空格、换行符和制表符结束输入,并在缓冲区中留下使输入结束的结束符(Enter、Space、Tab),作为下次cin>>开头的忽略。缓冲区有残留数据,读入操作直接从缓冲区中取数据。
注意:cin>>遇到结束符后会停止读入,但是并不会丢弃该结束符,而是下次读入时会跳过结束符。

char m,n;
std::cin >> m;
std::cin >>n;
这样看来好像是读取后丢弃了

char m,n;
std::cin>>m;
std::cin.get(n);
n将是换行符 这样便好像是留在缓存区,所以是留在缓冲区的,只是下次读入会忽略。

int a,b; 
cin>>a>>b; 
 
 
  • 1
  • 2
//获取字符串
char a[20]; 
cin>>a;
//或
string s;  
cin>>s;    //注意遇到空格会终止读取
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

二、cin.get()

cin.get()获取字符,可读取空格,遇到换行终止读取,但是不会丢弃缓冲区中的换行符。注意读取单个字符时是可以读取到回车符的。自定义结束符时也不会丢弃缓冲区中的结束符。

// 获取单个字符,可以读取换行符
ch=cin.get(); 
输入a b[Enter],则第一次读到'a',第二次读到空格,第三次读到'b',第四次读到换行enter
 
 
  • 1
  • 2
  • 3
// 读取19个字符,a最后一个字符'\0'(字符串结束标志)
char a[20]; 
cin.get(a,20);    //20表示接受字符个数,cin.get(数组名,长度,结束符),默认遇到换行符停止。
 
 
  • 1
  • 2
  • 3
cin.get(a,20);
cin.get();  //由于get遇到换行符终止,但是不会丢弃换行符而是将其留在缓冲流中,这会导致下次get读取时直接终止,读取不到字符。所以使用cin.get()读取单个字符强行将换行符读取清除掉。
cin.get(b,20);
 
 
  • 1
  • 2
  • 3

三、cin.getline()

cin.getline()读取一行,可读取空格,遇到换行终止读取并将换行符从缓冲区清除掉。

char a[10]; 
cin.getline(a,5);  //5表示接受字符个数
如果输入12345[Enter],将会读取到1234,但是如果接下来继续读取将会出错。比如使用ch=cin.get();将会读取不到5。而如果使用cin.get(a,5)则不会出现该情况。
 
 
  • 1
  • 2
  • 3

四、string中读取方法

getline():
getline遇到换行符时停止读入,并会将换行符丢弃。
注意在getline前面使用cin时,cin会留下结束符,如果是回车(换行)符,getline将不会读取到数据。可以使用cin.ignore();忽略回车符。

cin>>a;
cin.ignore();
getline(cin,str);
 
 
  • 1
  • 2
  • 3

1.cin.getline()读取的字符串是数组,getline()是string类型。
2.cin.getline()会在字符数组结尾添加’\0’,getline()不一定,跟编译器有关,不过新的C++标准C++11要求以’\0’结尾。

#include<string> 
string str; 
getline(cin,str); 
 
 
  • 1
  • 2
  • 3

gets():

#include<string> 
char a[10][20]; 
for(int i=0; i<10; i++) 
{ 
   gets(a[i]); 
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

getchar():

#include<string> 
char ch; 
ch=getchar();  ////不能写成getchar(ch); 
 
 
  • 1
  • 2
  • 3

https://blog.csdn.net/qq_16234613/article/details/76922132}感谢作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值