[C.C++] 学长教你学C-day4-C语言字符串的输入与输出函数

36 0
Honkers 昨天 20:49 来自手机 | 显示全部楼层 |阅读模式

  “同学们,C语言中两个最常见的输入输出函数scanf()和printf()我们已经讲完了,相信大家现在都能灵活运用这两个函数。今天我们介绍几个其他的C语言中对于字符和字符串的输入输出函数。”
  “我们想在C语言中输出一个字符或字符串根据我们之前学过的printf()函数,我们可以这么写:[code_1]”

  1. //[code_1]
  2. #include<stdio.h>
  3. int main()
  4. {
  5. char a;
  6. a = 'a';
  7. char b[] = "Hello World!";
  8. char b1[20] = "Hello World!!";
  9. char *b2 = "Hello World!!!";
  10. printf("%c\n",a);
  11. printf("%s\n",b);
  12. printf("%s\n",b1);
  13. printf("%s\n",b2);
  14. return 0;
  15. }
复制代码

输出

  “首先这么写是一点问题都没有的,但是同学们不要忘了,printf()函数的参数本身就是一个字符型的指针变量,既然本来就是字符型,那我们还需要使用格式控制符吗,直接输出不也行吗,如:[code_2]”

  1. #include<stdio.h>
  2. int main()
  3. {
  4. printf("a\n");
  5. printf("Hello World!\n");
  6. printf("Hello World!!\n");
  7. printf("Hello World!!!\n");
  8. return 0;
  9. }
复制代码

输出

  “既然如此,在变量只有字符或者字符串的情况下输出用printf()函数输出它们有些大材小用了,那么我能不能单独设计一种函数直接就能输出字符和字符串呢?答案是肯定的。在C语言中putchar()和puts()函数就是用来专门处理字符和字符串的输出的。我们来看一下官方文档:”

官方文档:


  这时坐在前排的小胖同学问道:“学长,我有个问题,这个不是处理字符类型的函数吗,为什么它的参数是int型的呀?”。
  “你观察的很仔细,我正要说这个问题呢。咱们用的计算机虽然已经诞生很久了,但是它最底层的运算模式还是最原始的方式。就是使用二进制计算。还记得我第一天给你们讲的程序在计算机上的运行过程吗?程序在编译链接时,原本的.cpp文件被编译成了.exe文件也就是二进制文件,只有二进制才是计算机能识别的语言,那么我们通常写的代码根本就不是用二进制写的这怎么办呢?C语言代码可以通过转换成汇编语言再转换成二进制,整数型变量可以通过转换成二进制让计算机识别,同理,字符也是有自己相对应的编码方式的。”
  “在C语言中编码方式有很多,我们可以打开编译器的工具->编译器选项看一下(老版本的可能看不到):”

黑板

  “我们采用的编码一般都是UTF-8或者Unicode因为这两个都是可支持中文的编程的。但是最原始的编码应属ASCII编码了,至今还在沿用。下面我们可以看一看ASCII编码表里各符号对应的编码:”

官方文档





  “说完这些大家就应该能明白了为什么putchar()里面的参数是int,因为是用字符编码直接表示的,但是putchar()函数也可以直接用字符型参数,只不过是系统会自动帮我们转换成相应的码ASCII码。下面看一个例子:[code_3]”

  1. #include<stdio.h>
  2. int main()
  3. {
  4. char a='b';
  5. putchar(a);
  6. putchar('\n');
  7. putchar('a');
  8. putchar('\n');
  9. putchar(65);
  10. return 0;
  11. }
复制代码

输出

  “上面的例子里,我们用了putchar()输出了字符变量、单个字符和ASCII码对应的字符,但是细心的朋友会发现,我们的换行符也是通过putchar()输入的。那么有没有输出完字符后自带换行符的输出函数呢?答案是:有的。”
  “下面我们来看另外一个字符串输出函数puts()。”

官方文档

  “从它的参数可以看出来,puts()和putchar()的区别,前者可以直接输出一个字符串。示例:[code_4]”

  1. //[code_4]
  2. #include<stdio.h>
  3. int main()
  4. {
  5. char a[]="Hello World!";
  6. char a1[20]="Hello World!!";
  7. char *a2="Hello World!!!";
  8. puts(a);
  9. puts(a1);
  10. puts(a2);
  11. puts("Hello World!!!!");
  12. return 0;
  13. }
复制代码

输出

  “上面示例提供了三种字符串的定义方式:第一种,没有定义长度的数组,实际意义就相当于一个字符指针( 相当于 const char *string ) ,第二种是最大长度为20的数组,超出了20个字符程序就会报错;第三种是字符型指针变量,可以直接存储一个字符串常量与第一种类似就是不能通过下标修改,而第一种和第二种数组的命名方式都是可以通过下标修改字符串里面的字符内容的。”
  “咱们先下课十分钟,下节课接着讲字符和字符串的输入函数。”

  “同学们,我们继续。有输入就有输出。对于字符和字符串而言,C语言里也有很多相关的函数。”

  “我们先来学习getchar()。这个函数与putchar()的语法定义相同,作用是可以接收单个的字符。示例:[code_5]”

  1. //[code_5]
  2. #include<stdio.h>
  3. int main()
  4. {
  5. char a;
  6. a = getchar();
  7. putchar(a);
  8. return 0;
  9. }
复制代码

输出

  “这里我们要注意getchar()和putchar()的代码用法区别,putchar()的参数写在括号里面,getchar()是写在变量后面,是以赋值的形式接收到键入值再传递给变量的。也可以在变量定义时直接赋值:char a = getchar();”。

  “我们再来学习第二个输入函数gets()。这个函数也可以与puts()函数一起记忆。定义和用法也大致相同。示例代码:[code_6]”

  1. //[code_6]
  2. #include<stdio.h>
  3. int main()
  4. {
  5. char s[20];
  6. gets(s);
  7. puts(s);
  8. return 0;
  9. }
复制代码

输出

  “接下来,我们在来说最后两个函数就是getche()和getch(),首先这两个函数都是输入单独的一个字符的函数。但为什么放在最后讲而不和getchar()一起讲呢?当然是因为它们两个有些特殊之处。”
  “首先这两个都是处理单个字符的输入函数。还记得昨天给你们讲的缓冲区的概念吗?getche()和getch()都是没有缓冲区的,也就是说使用这两个函数的输入时,输入的内容会立刻传给cpu进行处理,而不是停留在缓冲区等待回车的键入。比如如下代码:[code_7]”

  1. [code_7]
  2. #include <stdio.h>
  3. #include <conio.h>
  4. int main()
  5. {
  6. char c = getche();
  7. putchar('\n');
  8. putchar(c);
  9. return 0;
  10. }
复制代码

输出

  “如上代码所示,在我们输入一个‘C’后立刻就在屏幕输出了‘C’,而不是像使用scanf()和getchar()那样按下回车才能进一步操作,这就是设有缓冲区和不设有缓冲区的区别所在。还有一点需要注意,使用getch()和getche()函数必须调用Windows特有的头文件conio.h,否则将无法使用。”
  “而getch()函数也是同样没有缓冲区,但是它与getche()还有一个不一样的地方,就是没有回显。看代码:[code_8]”

  1. [code_8]
  2. #include <stdio.h>
  3. #include <conio.h>
  4. int main()
  5. {
  6. char c = getch();
  7. putchar(c);
  8. return 0;
  9. }
复制代码

输出

  “这里我们键入一个‘C’,然后屏幕就只输出了一行‘C’,这个C显然是putchar()指令的结果,那么我们键入的C去哪了呢,答案是因为有getch()函数的性质,把我们输入的字符给隐藏掉了,所以我们只能看到输出的C而看不到键入的C。”
  “好了,同学们,关于C语言输入输出的知识点我已经给你们讲了很多了,正所谓‘师傅领进门,修行在个人’,剩下的内容就靠大家去学习领悟了,今天就到这里,下课。”

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行