例如在一个字符连接的问题中;scanf函数与gets()函数有着明显的区别
#include<stdio.h>
char* S(char* str1,char* str2)//定义一个指针类型的函数,作用为连接两个字符串。
{
char*p = str1;
while(*str1 != '\0')
*str1++;
while(*str2 != '\0')
*str1++ = *str2++;
*str1 = '\0';
return p;
}
int main()//主函数
{
char str1[20],str2[20];
printf("str1=");
//scanf("%s",&str1);
gets(str1);
printf("str2=");
//scanf("%s",&str2);
gets(str2);
printf("连接后的字符为%s",S(str1,str2));
}
首先,我们注释scanf函数,用gets()函数进行输入,输入str1=1 3 ,str2=1 4 ;(每个数字中间都有空格),结果如下:
?这说明gets()函数会将空格默认为一个字符进行输入;
然后我们注释gets()函数,用scanf函数输入同样的str1=1 3 ;str2=1 4 ;
#include<stdio.h>
char* S(char* str1,char* str2)
{
char*p = str1;
while(*str1 != '\0')
*str1++;
while(*str2 != '\0')
*str1++ = *str2++;
*str1 = '\0';
return p;
}
int main()
{
char str1[20],str2[20];
printf("str1=");
scanf("%s",&str1);
//gets(str1);
printf("str2=");
scanf("%s",&str2);
//gets(str2);
printf("连接后的字符为%s",S(str1,str2));
}
结果又会是怎样呢?请看下图:
结果很明显,scanf函数在输入时,将空格进行了忽略,并没有输出空格;这使得将空格放在了缓存区,也没办法进行输入str2,结果只能是13;
总结:scanf函数并不会区分空格和回车,scanf函数默认空格与回车的作用相同;而gets()函数会明确区分scanf与gets()这两种函数的区别,将空格默认为一个字符进行输入。
|