【内功篇】C语言的输入输出浅析(一)

xiaoxiao2021-02-28  61

我们在写C程序的时候都会写一个语句引入一个#include <stdio.h>头文件,这个stdio.h是何方神圣,有些人能够很快的把它敲出来但是并不知道啥意思。其实很简单,std是standard的简写,意思是“标准”,io嘛就是I/O,输入输出,显而易见,stdio.h就是C语言的标准输入输出头文件。我们只要想在C程序中实现输入输出功能就必须要用到它.

输入输出的概念很简单,这里不做多讲。主要还是谈一谈C程序中输入输出的具体实现。

在stdio.h头文件中声明了一些输入输出函数比如printf,scanf……这些我们都可以直接拿来用。简单吧,没错,看起来确实很简单,但是具体到使用上,就会发现里面的门门道道可不少,下面我就介绍一下这些函数的用法。

scanf 函数原型为:

> int scanf(const char *format, ...)

format 是一个C的字符串,主要用的是它的format说明符[=%[][width][modifiers]type=]。[]一般省略,[width]指定了在当前读取操作中读取的最大字符数,[modifiers]指定一些辅助参数,比如长/短为l/h、无符号有o,u,x……[type]就是我们经常使用的定义,主要指定数据类型以及数据读取方式。

如:

格式字符作用d从键盘输入十进制整数o从键盘输入八进制整数x/X从键盘输入十六进制整数i从键盘输入十,八,十六进制整数a/A从键盘输入一个浮点值(只有C99才支持)f,e,E,g,G从键盘输入实数c从键盘输入一个字符s从键盘输入一个字符串

用法也很简单

比如要输入一个整数:

int a; scanf("%d",&a);

简单吧,其它的输入也都差不多。 那我们稍微来点复杂的:

#include <stdio.h> int main () { int a; int b; char c; scanf ("%d",&a); scanf ("%d",&b); scanf ("%c",&c); printf("a = %d\n",a); printf("b = %d\n",b); printf("c = %c\n",c); return 0; }

运行一下 是不是很神奇,c怎么没办法输入。然而并非如此,c其实已经输入了,有没有看到运行结果下面空的两行,有一行是代码里的’\n’,还有一行就是我们不经意间输入的回车,没错字符c存入了’\n’。

那么问题来了,这是为啥呢?这就要从C语言标准输入原理说起了。具体过程就不说了,简单的来讲就是我们敲的内容不是马上就被程序读取的,而是被存进缓冲区里(内存里的某一块地方),然后程序到缓冲区里度,遇到类型一样的就读取,多余的部分就不管了……

怎么避免这种情况发生呢,有俩简单的解决办法,一个就是把字符输入写到其它输入的上面:

scanf ("%c",&c); scanf ("%d",&a); scanf ("%d",&b);

还有就是输入两遍字符:

scanf ("%d",&a); scanf ("%d",&b); scanf ("%c",&c); scanf ("%c",&c);

具体咋用,高兴就好。当然也可以通过条件语句来进行约束,这里就不做说明了。 顺便说明一下,scanf ("%c",&c);和c = getchar();的效果是一样的。


再简单说一下scanf ("%s",str);这是用来输入字符串的,“str”是字符串的首地址。 没什么好解释的,重点就是强调一下此时的scanf在缓冲区读到空格时,就不再继续读了。

#include <stdio.h> int main () { char s[64]; scanf ("%s",s); printf ("%s",s); return 0; }

大家可以自己试一下。

如果有其他的问题欢迎在评论区里提出来哦,不一定能解答出来,但是可以享受共同探讨的乐趣不是吗^ ^

转载请注明原文地址: https://www.6miu.com/read-79558.html

最新回复(0)