c语言—文件
输入输出
格式化的输入输出
printf
后面%可以跟%[flags][width][.prec][hIL]type
具体说
flag | 含义 |
---|---|
- | 左对齐 |
+ | 在前面放+或者- |
(space) | 正数留空 |
0 | 0填充 |
printf(""%9d",123);//输出占据9个字符的位置(默认右对齐)
printf(""%-9d",123);//左对齐
printf(""%09d",123);//缺位补零
width或prec | 含义 |
---|---|
number | 最小字符数 |
* | 下一个参数是字符数 |
.number | 小数后面的位数 |
/* | 下一个参数是小数点后面 的位数 |
printf("%9.2f",12.3);//一共9位数(包括小数点)小数位是2个
printf("%*d",6,123);//*对应6:说明字符数为6,输出为123(前面还有三个空格)
类型修饰符 | 含义 |
---|---|
hh | 单个字节 |
h | short |
l | long |
ll | long long |
L | long double |
printf("%hhd",12);//输出为char型
type | 用于 |
---|---|
i或者d | int |
u | unsigned int |
o | 八进制 |
x | 十六进制 |
X | 字母大写的十六进制 |
f或者F | float |
e或E | 指数 |
g或G | float |
a或A | 十六进制浮点 |
c | char |
s | 字符串 |
p | 指针(地址) |
n | 读入/写出个数 |
scanf
后面%跟%[flag]type
具体说:
flag | 含义 |
---|---|
* | 跳过 |
数字 | 最大字符数 |
hh | char |
h | short |
l | long |
ll | long long |
L | long double |
#include"stdio.h"
void main()
{
int num=2;
scanf("%*d%d",&num);
printf("输出:");
printf("%d\n",num);
}
输入:12,回车,13
输出:13(自动跳过12的输入)
type | 用于 |
---|---|
d | int |
i | 整数,可能为十六进制或八进制 |
u | unsigned int |
o | 八进制 |
x | 十六进制 |
a,e,f,g | float |
c | char |
s | 字符串 |
p | 指针 |
printf和scanf的返回值
printf
:输出的字符数
scanf
:输入的项目数
#include"stdio.h"
void main()
{
int num;
int i1,i2;
i1=scanf("%d",&num);
i2=printf("%d\n",num);
printf("输入:");
printf("i1=%d\ti2=%d\n",i1,i2);
}
结果:我输出1234加回车,所以输入为一个项目数,输出为5个字符(包括回车)
文件的输入输出
使用FILE
打开文件的标准代码
FILE *fp=open("file","r");//file:文件名 r:读
if(fp)
{
fscanf(fp,....);
fclose(fp); //观掉文件
}
else{
......
}
如果没有打开这个文件,返回no
如:在当前文件夹下新建read.txt的文档。里面写入1234;
#include"stdio.h"
void main()
{
int num;
FILE *fp=fopen("read.txt","r") ;
if(fp)
{
printf("成功打开文档!\n");
fscanf(fp,"%d",&num);
printf("%d\n",num);
fclose(fp);
}
else{
printf("无法打开文档!\n");
}
}
结果:
fopen的参数
r | 打开只读 |
---|---|
r+ | 打开读写,从文件头开始 |
w | 打开只写,如果不存在则新建,存在则清空 |
w+ | 打开读写,如果不存在则新建,存在则清空 |
a | 打开追加,如不存在则新建,存在则从文件尾开始 |
…x | 只新建,如果文件存在则不能打开 |
- | 打开读写,从文件头开始 |
| w | 打开只写,如果不存在则新建,存在则清空 |
| w+ | 打开读写,如果不存在则新建,存在则清空 |
| a | 打开追加,如不存在则新建,存在则从文件尾开始 |
| …x | 只新建,如果文件存在则不能打开 |