【内功篇】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]就是我们经常使用的定义,主要指定数据类型以及数据读取方式。
如:
用法也很简单
比如要输入一个整数:
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;}
大家可以自己试一下。
如果有其他的问题欢迎在评论区里提出来哦,不一定能解答出来,但是可以享受共同探讨的乐趣不是吗^ ^
- 【内功篇】C语言的输入输出浅析(一)
- 【内功篇】C语言的输入输出浅析(二)
- 【内功篇】C语言的输入输出浅析(三)
- 【内功篇】C语言的输入输出浅析(四)
- c语言中的输入输出(一)
- c 语言的输入输出
- c语言的输入输出
- C语言的输入输出
- C语言的输入输出
- 第三篇:C语言的输入输出函数
- C语言的文件输入输出(39)
- C语言的输入输出实验
- c语言的格式化输入输出
- C语言 文件的输入输出
- C语言字符的输入输出
- C语言的输入输出函数
- C语言字符的输入输出
- C语言的字符串输入输出
- 输入两个链表,找出它们的第一个公共结点
- ADO.NET的数据库访问
- Eclipse 设置新建文件后编码默认都为 utf-8 的方法
- UDP,TCP,SCTP区别
- Javscript删除数组中指定元素
- 【内功篇】C语言的输入输出浅析(一)
- analogWrite()
- java中String和StringBuffer区别
- 第四章Python对象
- mybatis配置MySQL的批量查询
- 5、opencv的Mat介绍
- Android 自定义搜索框
- 玩家任务表(每个玩家应该有14条任务记录,需要根据"任务配置表"补全"玩家任务表",原有记录不能修改把每人缺失的任务记录补上)
- 论文阅读Faster RCNN