在吸收用键盘输入的数据时gets()与scanf()函数都有读取字符串的功能。但是他们吸收字符串除了gets()能吸收空格而scanf()不能吸收空格的区别之外。他们还是有很大的区别的。若能掌握这些细节,那么用这些函数时就能更加灵活
咱们先看课本中对gets()和scanf()吸收字符串的介绍。
gets()函数用法:
gets()函数可以接受输入包含空格的完整句子,知道遇到换行符结束。 功能:接受用户键盘输入,将输入的字符串保存在字符数组中,如果接受到【enter】键则返回,并在字符串的末尾加上字符串结束字符'\0';
char str[100];
gets(str);
puts(str);
输入字符串 ''how are you''【回车】输出str字符串 结果为how are you,当然字符串结尾str[11]='\0';(回车键当然也不会吸收)
gets()函数可以吸收空格,但遇见回车不吸收,并且把把回车当作该字符串的结束标志,在字符串末尾补'\0';
scanf()函数用法:
scanf()函数吸收字符串时使用格式控制符%s,与%s对应的是字符数组的名称,此时空格和回车符号均作为输入数据的分隔符而不能读入。
eg:
#include<stdio.h>
int main()
{
char s1[100],s2[100],s3[100];
scanf("%s%s%s",s1,s2,s3);
printf("s1=*%s*,s2=*%s*,s3=*%s*",s1,s2,s3);
}
输入字符串 ''how are you''【回车】输出:s1=*hello*, s2=*are*,s3=*you*;
即scanf()吸收字符串时,不吸收空白符,遇见空白符停止吸收,在字符串末尾补'\0',并且scanf()吸收字符时会自动略过开头的空白符,直至遇见一个非空白符才开始它的吸收过程。
#include<stdio.h>
int main()
{
char a,s[100];
scanf("%s",s);
getchar();
scanf("%c",&a);
printf("string s=*%s*,char a=*%c*",s,a);
}
#include<stdio.h>
int main()
{
char a,s[100];
scanf("%s",s);
scanf("%c",&a);
printf("string s=*%s*\nchar c=*%c*",s,a);
}
#include<stdio.h>
int main()
{
char a,s[100];
gets(s);
a=getchar();
printf("string s=*%s*,char a=*%c*",s,a);
}