C语⾔字符串的输⼊和输出
其实章中我们已经提到了如何输⼊输出字符串,但是那个时候我们还没有讲解字符串,⼤家理解的可能不透彻,所以本节我们有必要再深⼊和细化⼀下。
字符串的输出
在C语⾔中,有两个函数可以在控制台(显⽰器)上输出字符串,它们分别是:
puts():输出字符串并⾃动换⾏,该函数只能输出字符串。
printf():通过格式控制符%s输出字符串,不能⾃动换⾏。除了字符串,printf() 还能输出其他类型的数据。
这两个函数相信⼤家已经⾮常熟悉了,这⾥不妨再演⽰⼀下,请看下⾯的代码:
1. #include <stdio.h>
2. int main(){
3. char str[] = "c.biancheng";
4. printf("%s\n", str); //通过字符串名字输出
5. printf("%s\n", "c.biancheng"); //直接输出
6. puts(str); //通过字符串名字输出
7. puts("c.biancheng"); //直接输出
8.
9. return 0;
10. }
printf("%s\n", str[]);
puts(str[10]);
字符串的输⼊
在C语⾔中,有两个函数可以让⽤户从键盘上输⼊字符串,它们分别是:
scanf():通过格式控制符%s输⼊字符串。除了字符串,scanf() 还能输⼊其他类型的数据。
gets():直接输⼊字符串,并且只能输⼊字符串。
但是,scanf() 和 gets() 是有区别的:
scanf() 读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以⽆法读取含有空格的字符串。
gets() 认为空格也是字符串的⼀部分,只有遇到回车键时才认为字符串输⼊结束,所以,不管输⼊了多少个空格,只要不按下回车键,对 gets() 来说就是⼀个完整的字符串。换句话说,gets() ⽤来读取⼀整⾏字符串。
1. #include <stdio.h>
2. int main(){
3. char str1[30] = {0};
4. char str2[30] = {0};
5. char str3[30] = {0};
6.
7. //gets() ⽤法
8. printf("Input a string: ");
9. gets(str1);
10.
11. //scanf() ⽤法
12. printf("Input a string: ");
printf怎么输出字符13. scanf("%s", str2);
14. scanf("%s", str3);
15.
16. printf("\nstr1: %s\n", str1);
17. printf("str2: %s\n", str2);
18. printf("str3: %s\n", str3);
19.
20. return 0;
21. }
运⾏结果:
Input a string: C C++ Java Python↙
Input a string: PHP JavaScript↙
str1: C C++ Java Python
str2: PHP
str3: JavaScript
第⼀次输⼊的字符串被 gets() 全部读取,并存⼊ str1 中。第⼆次输⼊的字符串,前半部分被第⼀个 scanf() 读取并存⼊ str2 中,后半部分被第⼆个 scanf() 读取并存⼊ str3 中。
注意,scanf() 在读取数据时需要的是数据的地址,这⼀点是恒定不变的,所以对于 int、char、float 等类型的变量都要在前边添加&以获取它们的地址。但是在本段代码中,我们只给出了字符串的名字,却没有在前边添加&,这是为什么呢?因为字符串名字或者数组名字在使⽤的过程中⼀般都会转换为地址,所以再添加&就是多此⼀举,甚⾄会导致错误了。
就⽬前学到的知识⽽⾔,int、char、float 等类型的变量⽤于 scanf() 时都要在前⾯添加&,⽽数组或者字符串⽤于 scanf() 时不⽤添
加&,它们本⾝就会转换为地址。读者⼀定要谨记这⼀点。
⾄于数组名字(字符串名字)和地址的转换细节,以及数组名字什么时候会转换为地址,我们将在⼀节中详细讲解,⼤家暂时“死记硬背”即可。
其实 scanf() 也可以读取带空格的字符串
以上是 scanf() 和 gets() 的⼀般⽤法,很多教材也是这样讲解的,所以⼤部分初学者都认为 scanf() 不能读取包含空格的字符串,不能替代 gets()。其实不然,scanf() 的⽤法还可以更加复杂和灵活,它不但可以完全替代 gets() 读取⼀整⾏字符串,⽽且⽐ gets() 的功能更加强⼤。⽐如,以下功能都是 gets() 不具备的:
scanf() 可以控制读取字符的数⽬;
scanf() 可以只读取指定的字符;
scanf() 可以不读取某些字符;
scanf() 可以把读取到的字符丢弃。
这些我们已经讲解过了,本节就不再赘述了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论