scanf和gets都可以输入字符串,但是对于常用到的回车和空格有很大区别
我们通过简单的“Hello world"来辨证一下二者的区别
(一)scanf连发篇
#include<stdio.h>
#include<string.h>
int main(){
char str1[20],str2[20];
scanf("%s",str1);
printf("%s\n",str1);
printf("%d\n",strlen(str1));//看str1的长度
scanf("%s",str2);
printf("%s\n",str2);
printf("%d",strlen(str2));//看str2的长度
return 0;
}
1、scanf
输入含空格的字符串“Hello world"
结果:
说明用scanf输入,在空格处直接停止 ,从w开始读取下一个
而str1,str2都是不含空格的
2、scanf
输入含回车的“Hello回车"时,输入两次才会结束命令
当两个连续的scanf命令连接时
str1,str2不含回车
(二)gets连发篇
#include<stdio.h>
#include<string.h>
int main(){
char str1[20],str2[20];
gets("%s",str1);
printf("%s\n",str1);
printf("%d\n",strlen(str1));//看str1的长度
gets(str2);
printf("%s\n",str2);
printf("%d",strlen(str2));//看str2的长度
return 0;
}
3、gets
输入含空格的字符串“Hello world",再”回车”结束输入命令
输入两次才结束,且字符串长度为单词+空格
说明gets与空格不停止,而空格作为一个字符被输入
同时也能看出,换行符只作为结束输入的标志,对其并无影响
(三)scanf+gets连接篇
4、先scanf后gets
#include<stdio.h>
#include<string.h>
int main(){
char str1[20],str2[20];
scanf("%s",str1);
printf("%s\n",str1);
printf("%d\n",strlen(str1));//看str1的长度
gets(str2);
printf("%s\n",str2);
printf("%d",strlen(str2));//看str2的长度
return 0;
}
输入含回车的“Hello回车"
结果:
说明 scanf内输入的回车直接落在了gets所输入的字符中
此时str1是"Hello"
而str2是”回车“
输入含空格的“Hello world"
str2中包含了空格
5、先gets后scanf
#include<stdio.h>
#include<string.h>
int main(){
char str1[20],str2[20];
gets(str1);
printf("%s\n",str1);
printf("%d\n",strlen(str1));//看str1的长度
scanf("%s",str2);
printf("%s\n",str2);
printf("%d",strlen(str2));//看str2的长度
return 0;
}
输入含空格和回车的“Hello world",且输入了两次
说明只有scanf在gets前才对下一个字符的输入有影响
总结
scanf:空格和回车是结束,同时当下一个输入命令不是scanf时,空格作为下一个输入的开端,回车作为下一个字符
gets:空格作为输入的字符;而回车就是结束的标志,对下一个无影响