字符串的输入:
在C语言中,输入字符串的两种函数:
scanf():通过格式控制符%s输入字符串,除了字符串,scanf()还能输入其他类型的
gets():直接输入字符串,并且只能输入字符串
(1)使用scanf()读取字符串
例如:
#include<stdio.h>
int main(){
char str1[10],str2[10];
printf("请输入字符串str1:");
scanf("%s",str1);
printf("请输入字符串str2:");
scanf("%s",str2);
printf("str1:%s\n str2:%s\n ",str1,str2);
return 0;
}
运行结果:
请输入字符串str1:Eglish
请输入字符串str2:Like C
str1:Eglish
str2:Like
由于字符串数组长度为10,因此输入的字符串长度必须小于10,以留出一个字节用于存放字符串结束标志"\0"分析:①程序scanf()只读取到“Like”,因为scanf()读取到空格就认为字符串输入结束
例如:
#include<stdio.h>
int main(){
char str1[10],str2[10],str3[10];
printf("请输入字符串:");
scanf("%s",str1);
scanf("%s",str2);
scanf("%s",str3);
printf("str1:%s\nstr2:%s\nstr3:%s\n",str1,str2,str3);
return 0;
}
运行结果:
请输入字符串:I Like C
str1:I
str2:Like
str3:C
第一个scanf()读取到第一个空格时,结束读取,将后续字符串留在缓冲区,第二个scanf()直接从缓冲区继续读取,不会等待用户输入,读取到第二个空格时,再次结束读取,再次将后续字符串留在缓冲区,第三个scanf()继续读取接下来的内容。
②scanf()的各个变量前面要加取地址符&,以获得变量地址,但是在本实例中并没有使用&。这是因为C语言规定,数组名代表了该数组的地址,数组名所代表的地址为第0个元素的地址,例如char c[10];c代表c[0]的地址,第0个元素的地址就是数组的其实地址,称为首地址,就是说数组名表示的数组首地址。
例如:设数组c的首地址为210,也就是c[0]地址为210,则数组名就代表这个地址,因为已经表示地址,所以在c前面不能加取地址&。有了首地址,有了字符串结束符"\0",就可以在内存中完整定位一个字符串了。printf()函数会根据数组名找到C的首地址,然后逐个输出数组中各个字符直到遇到"\0"为止。int 、float、char类型的变量表示数组本身,数据就保存在变量中;而数组名表示数组的首地址,数组保存在其他内存单元中,数组名就是保存这块内存的首地址。
(2)使用gets()读取字符串:
gets是get string 的缩写,意思是获取用户从键盘输入的字符串,语法格式为:
get(arrayName);
arrayName为字符串数组。从键盘获得的字符串,将保存在arrayName中,例如:
#include<stdio.h>
int main(){
char str1[10],str2[10];
printf("请输入字符串1:");
gets(str1);
printf("请输入字符串2:");
gets(str2);
printf("str1:%s\nstr2:%s\n",str1,str2);
return 0;}
请输入字符串1:I like c
请输入字符串2:http://w
str1: I like c
str2:http://w
gets()函数不会把空格作为输入结束的标志,而只把回车换行作为输入的结束标志。
总结:如果希望读取的字符串不包含空格,使用scanf()函数;如果希望获取整行字符串,使用gets()函数。
字符串的输出:
在C语言中,输出字符串的函数有两个:
①puts():直接输出字符串,并且只能输出字符串
②printf():通过格式控制符%s输出字符串,除了字符串还可以输出其他类型的数据
例如:
#include<stdio.h>
int main(){
int i;
char str[]="http://www.baidu.com";
printf("%s\n",str);//通过变量输出
printf("%s\n","http://www.baidu.com");//直接输出
puts(str);//通过变量输出
puts("http://www.baidu.com");//直接输出
return 0;
}
运行结果:
http://www.baidu.com
http://www.baidu.com
http://www.baidu.com