当前位置:   article > 正文

小白快进来,一篇文章彻底带你弄清C语言常见的输入输出函数_c语言输入函数

c语言输入函数

目录

1.printf函数

(1)printf函数的语法

(2)printf函数的宽域

(3)printf函数的返回值

2.scanf函数

(1)scanf函数的语法

(2)scanf函数的返回值

3.getchar函数

(1)getchar函数的语法

4.putchar函数 

(1)putchar函数的语法

5.gets函数和puts函数

(1)gets的语法 

(2)puts的语法


        在C语言中常见的输入输出函数有六个,分别是scanf'函数,printf函数,getchar函数,gets函数,putchar函数,puts函数,本篇文章就带你一次搞定这些函数的用法。

1.printf函数

printf函数是一个输出函数,能将数据打印到终端中,使用前需引用头文件stdio.h

(1)printf函数的语法

printf(格式控制,输出列表);

①格式控制:是由双引号括起来的一个字符串,它里面包含两个信息,分别为格式声明和普通字符。格式声明是由%和格式字符组成,比如%d,%f,%p等。他的作用是将格式列表中的数据按照指定的方式输出。普通字符在输出后原样输出。看一下实例测试,快速了解该函数用法。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int num = 95;
  5. printf("这是数字%d\n", num);
  6. printf("这是字符%c\n", num);
  7. printf("这是地址%p\n", num);
  8. return 0;
  9. }

以下为该函数的输出结果

        明明同一个数据为什么打印出不同的结果呢?那是因为三个语句都用了不同的格式声明,%d是打印一个十进制的数字,%c是打印一个字符,而图中下划线的ASCII值正是95,%p是以地址的形式打印,编译器输出的是一个16进制的数字,0000005F转换为十进制的值也正是95。以下为一些常见的格式声明。

格式声明说明
%d以带符号的十进制形式输出整数
%o以八进制无符号形式输出整形
%x,%X以十六进制无符号形式输出整形
%u以无符号十进制形式输出整形
%c以字符形式输出一个字符
%s输出字符串
%f以单精度浮点型形式输出小数
%lf以双精度浮点型形式输出小数
%p以地址的形式输出

(2)printf函数的宽域

        在格式声明中,我们还可以控制输出的格式,我们通过在%和字母之间加入一个数字,规定输出数字所占的宽度,比如printf("这是数字%5d\n", num);,中间的5规定了num这个数字占5个位置,如果不够则原样输出,如果溢出则在左边补空格直至充满5个位置为止,如果是负数则在右边补空格。

 注:标点符号也算一个位置。

(3)printf函数的返回值

       先说结论,printf函数的返回值是,该函数打印字符的个数,接下来通过一道经典的题目带你仔细品味该函数返回值的用法。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int num = 43;
  5. printf("%d", printf("%d", printf("%d", num)));
  6. return 0;
  7. }

以上代码的结果为4321,那么为什么是这个结果呢?

分析:通过观察可以发现第五行代码由三个printf函数组成,要想知道第一个printf函数的打印结果需要知道嵌套的第二个printf函数的返回值,要知道第二个printf函数的返回值得知道嵌套的第三个printf函数的返回值,第三个printf函数执行打印数字43,由于打印了两个字符因此返回2,因此第二个嵌套函数打印了2,并返回了打印字符的个数,即1,因此最外层的printf函数打印1,最终结果因此为4321。

2.scanf函数

scanf函数是一个输入函数,能从键盘中读取数据,使用前需引用头文件stdio.h

(1)scanf函数的语法

scanf(格式控制,地址列表);

        格式控制就不再多做介绍,与printf函数中的格式控制大体相同,通过阅读以下代码,了解scanf函数的用法。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char ch = 'a';
  5. int num = 0;
  6. double f = 0;
  7. scanf("%c %d %lf", &ch, &num, &f);
  8. printf("%c\n", ch);
  9. printf("%d\n", num);
  10. printf("%f\n", f);
  11. return 0;
  12. }

 有以下几点需要特别注意:

①&为取地址符,地址列表中只能放地址的参数,如果是数组可放数组名,因为数组名代表首元素地址。

②在格式控制中,尽量不要添加普通字符,因为添加普通字符时,在你从键盘中输入数据时,也要将这些普通字符添加上。

③scanf函数不会读取空格和回车,所以在写入以上数据时,每写一个数据就空一格或换行。

(2)scanf函数的返回值

        scanf函数的返回值是该函数读取数据的个数,牛客网有许多多组输入的试题都可以通过该函数的返回值来实现。

例:判断一个数是否为奇数,如果是则输出该数字,要求多组输入,并输出。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. //创建num变量,输入的数字都存入num变量中
  5. int num = 0;
  6. while (scanf("%d", &num) == 1)
  7. {
  8. if (num % 2 == 1)
  9. {
  10. printf("%d ", num);
  11. }
  12. }
  13. return 0;
  14. }

        以上 while (scanf("%d", &num) == 1) 此行代码等价于while (scanf("%d", &num) != EOF)和

while (~scanf("%d", &num))。

        EOF即是end of file的缩写,意思是文件的结尾,当scanf读取不到数据或者读入错误时,会返回EOF,EOF的本质或者说他的值是-1,下图是VS源码对EOF的定义。

3.getchar函数

getchar函数是一个读取字符的函数,使用前需使用头文件stdio.h

(1)getchar函数的语法

char ch = getchar( );

        该函数并无参数,返回值是从键盘上读取的字符,如果读取错误或者无法读取数据则返回EOF。 

注:该函数与scanf函数类似,但在使用中依然有一些细节需要注意

1.该函数只能用来读取字符,不能用来读取其他数据

2.该函数可以读取空格和回车,而scanf不能读取空格和回车

可以通过以下两段代码细细品味其中的细节

代码一:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char str[20] = { 0 };
  5. //键盘输入 abc ef
  6. scanf("%s", str);
  7. printf("%s\n", str);
  8. return 0;
  9. }

         scanf函数只能读取空格之前的数据,本例中并未读取,可以体现scanf函数不能读取空格的特性。

代码二:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char psw[20] = { 0 };
  5. printf("请输入您的密码:");
  6. scanf("%s", psw);
  7. printf("请确认(Y/N):");
  8. getchar();
  9. if ('Y' == getchar())
  10. {
  11. printf("确认成功");
  12. }
  13. return 0;
  14. }

        本段代码中,第八行为上面会用一个getchar函数呢?这就涉及到了内存的读写数据,以下简单的介绍缓冲区及其作用。

         如上图,键盘输入数据时,并不是直接存入内存中的,而是先将数据存入缓冲区,然后一个一个的读取数据。在以上代码中,假设我输入的是abcdefg这个字符串作为密码,abcdefg确实被存进了psw这个数组中,由于scanf函数不会读取换行符号,因此缓冲区存在一个\n,如果没有第八行的getchar函数,if语句中的getchar函数会读取到\n,if语句里的条件表达式就永远不会为真,该程序就出现了bug。故第八行的getchar函数的目的是为了清空缓存区。

4.putchar函数 

putchar函数是一个输出函数,将字符打印到屏幕上,使用前需引用stdio.h文件

(1)putchar函数的语法

putchar(字符常量或变量); 

         该函数不仅仅能将字符常量或变量作为参数,还可以将int型的变量或常量作为参数,当将int型作为参数时,作用是打印该整型对应的ASCII值。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char ch = 'A';
  5. //将字符变量作为参数
  6. putchar(ch);
  7. //将字符常量作为参数
  8. putchar('a');
  9. int i = 98;
  10. //将整型常量作为参数
  11. putchar(66);
  12. //将整型变量作为参数
  13. putchar(i);
  14. return 0;
  15. }

5.gets函数和puts函数

        gets函数是一个输入函数,其功能是将键盘获取输入的字符串,puts函数则是一个输出函数,其功能是将字符串打印到屏幕上,使用它们前都需要引用头文件stdio.h

(1)gets的语法 

gets(字符数组名);

 该函数有以下需要注意点:

1.gets函数可以读取空格。

2.gets函数在读取结束后,默认加一个回车。

(2)puts的语法

puts(字符数组名);

 该函数与gets函数特点类似,可以输出空格,在输出结束后也会默认添加回车。

通过以下代码体会这两个函数的特点:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int str[20] = { 0 };
  5. gets(str);
  6. puts(str);
  7. //测试puts是否添加换行符
  8. printf("1");
  9. return 0;
  10. }

结语:以上就是本人在学习期间对这六个函数的理解,如有错误,欢迎广大读者纠正。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/49703
推荐阅读
相关标签
  

闽ICP备14008679号