在之前的C语言学习中,我们学习了C语言数组的概念、字符数组和字符串的概念以及字符串处理函数的方法,今天课课家小编要给大家介绍的是如何通过字符串来进行输出输入的方法和步骤。
◎字符串的输出
在C语言中,输出字符串的函数有两个:
puts():直接输出字符串,并且只能输出字符串。
printf():通过格式控制符%s输出字符串。除了字符串,printf()还能输出其他类型的数据。
下面小编为大家举个例子让大家回想回想一下:
#include
intmain(){
inti;
charstr[]="http://www.kokojia.com";
printf("%s\\n",str);//通过变量输出
printf("%s\\n","http://www.kokojia.com");//直接输出
puts(str);//通过变量输出
puts("http://www.kokojia.com");//直接输出
return0;
}
运行结果:
http://www.kokojia.com
http://www.kokojia.com
http://www.kokojia.com
http://www.kokojia.com
在printf()函数中使用%s输出字符串时,在变量列表中给出数组名就可以了,但需要我们注意的地方是不能写为printf("%s",str[]);。
◎字符串的输入
在C语言中,输入字符串的函数有两个:
scanf():通过格式控制符%s输入字符串。除了字符串,scanf()还能输入其他类型的数据。
gets():直接输入字符串,并且只能输入字符串。
①使用scanf()读取字符串
首先大家先观察下面的代码例子:
#include
intmain(){
charstr1[30],str2[30];
printf("Inputstr1:");
scanf("%s",str1);
printf("Inputstr2:");
scanf("%s",str2);
printf("str1:%s\\nstr2:%s\\n",str1,str2);
return0;
}
运行结果:
Inputstr1:www.kokojia.com↙
Inputstr2:javaPythonC-Sharp↙
str1:www.kokojia.com
str2:Java
由于字符数组长度为30,因此输入的字符串长度必须小于30,以留出一个字节用于存放字符串结束标志`\\0`。我们本来希望将"JavaPythonC-Sharp"赋值给str2,但是scanf()只读取到"Java",这是因为scanf()读取到空格时就认为字符串输入结束了,不会继续读取了。具体大家可以观察下面的代码例子:
#include
intmain(){
charstr1[20],str2[20],str3[20];
printf("Inputstring:");
scanf("%s",str1);
scanf("%s",str2);
scanf("%s",str3);
printf("str1:%s\\nstr2:%s\\nstr3:%s\\n",str1,str2,str3);
return0;
}
运行结果:
Inputstring:JavaPythonC-Sharp↙
str1:Java
str2:Python
str3:C-Sharp
第一个scanf()读取到"Java"后遇到空格,结束读取,将"PythonC-Sharp"留在缓冲区。第二个scanf()直接从缓冲区中读取,不会等待用户输入,读取到"Python"后遇到空格,结束读取,将"C-Sharp"留在缓冲区。第三个scanf()读取缓冲区中剩下的内容。通常情况下scanf的各个变量前面要加取地址符&,用以获得变量的地址,比如:
inta,b;
scanf("%d%d",&a,&b);
但是在本次的代码例子中将字符串读入字符数组却没有使用&,比如:
charstr1[20],str2[20],str3[20],str4[20];
scanf("%s%s%s%s",str1,str2,str3,str4);
这是由于C语言规定数组名就代表了该数组的地址。整个数组是一块连续的内存单元,比如有字符数组charc[10],在内存可表示如图1所示:
图1
另外C语言还规定数组名所代表的地址为第0个元素的地址,比如charc[10];,c就代表c[0]的地址。第0个元素的地址就是数组的起始地址称为首地址,也就是说数组名表示数组的首地址。设数组c的首地址为0X2000,也就是c[0]地址为0X2000,则数组名c就代表这个地址。因为c已经表示地址,所以在c前面不能再加取地址符&,比如写作scanf("%s",&c);是错误的。有了首地址,有了字符串结束符'\\0',就可以在内存中完整定位一个字符串了,如:printf("%s",c);。printf函数会根据数组名找到c的首地址,然后逐个输出数组中各个字符直到遇到'\\0'为止。int、float、char类型的变量表示数据本身,数据就保存在变量中,而数组名表示的是数组的首地址,数组保存在其他内存单元,数组名保存的是这块内存的首地址。
②使用gets()读取字符串
gets是getstring的缩写,具体的意思是获取用户从键盘输入的字符串,通常的语法格式为:
gets(arrayName);
arrayName为字符数组。从键盘获得的字符串,将保存在arrayName中。具体大家可以观察下面的例子:
#include
intmain(){
charstr1[30],str2[30];
printf("Inputstr1:");
gets(str1);
printf("Inputstr2:");
gets(str2);
printf("str1:%s\\nstr2:%s\\n",str1,str2);
return0;
}
运行结果:
Inputstr1:JavaPythonC-Sharp↙
Inputstr2:http://www.kokojia.com↙
str1:JavaPythonC-Sharp
str2:http://www.kokojia.com
我们可以从以上代码和运行结果中发现,当输入的字符串中含有空格时,输出仍为全部字符串,这就说明gets()函数不会把空格作为输入结束的标志,而只把回车换行作为输入结束的标志,这与scanf()函数是不同的。
最后总结:如果我们希望读取的字符串中不包含空格,那么使用scanf()函数;如果我们希望获取整行字符串,那么使用gets()函数,它能避免空格的截断。
本次C语言基础之字符串的输入输出的教程到此暂告一段落,如果以后有补充的话小编会继续在此补充,同时也欢迎大家的补充。最后希望这次的教程对大家学习C语言能够起到一定的帮助作用!
¥25.00¥49.00
¥150.00
¥100.00
¥98.00