一,C中字符和字符串读入规则
1.scanf输入,printf输出
scanf("%c %s",&s1,&s2); %c可以读入空格和换行存储在字符变量中,%s通过空格或换行来识别一个字符串的结束。
2.getchar输入,putchar输出
getchar和putchar分别用于单个字符的输入和输出。例如:
#include<cstedio>
int main(){
char str[5][5];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
str[i][j]=getchar();
}
getchar(); //这里是用来吸收每行末尾的换行符
}
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
putchar(str[i][j]);
}
putchar('\n');
}
return 0;
}
3.gets输入,puts输出
gets用来输入一行字符串,以换行符作为截断标志,因此在scanf完一个整数后如果要使用gets,需要先使用getchar接收整数后的换行符。puts用来输出一行字符串。
#include<cstdio>
int main(){
char str1[20];
char str2[5][20];
gets(str1);
for(int i=0;i<3;i++){
gets(str2[i]);
}
puts(str1);
for(int i=0;i<3;i++){
puts(str2[i]);
}
return 0;
}
//输入:
Aosdgjrdg
QAQ
T_T
Aodd
//输出相同
注意:
1.在开char型字符数组时以\0作为字符数组结束标志,所以char型数组空间必须比存储的数据至少大1个单位,int型则不需要。
2.如果不是使用scanf(“%s”,&s1)或gets读入一行字符串,例如使用getchar读入字符,必须手动在末尾添加结束符‘\0',否则会异常。
二,C++中字符串读入
1.使用getline(cin,string),读入整行字符串和gets类似,如果使用getline之前读入了其他数据,即首先使用了cin或scanf输入数据然后再使用getline时,需要使用getchar接收掉后面的换行符才行。