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

来源:互联网 发布:程序员 架构师 编辑:程序博客网 时间:2024/06/11 04:39

我们在写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;}

大家可以自己试一下。

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

这里写图片描述

原创粉丝点击