【C语言程序设计进阶-浙大翁恺】C语言笔记 文件
- 文件
- 格式化输入输出
- 文件输入输出
- 二进制文件
- 位运算
- 按位运算
- 移位运算
- 位运算例子
- 位段
文件
格式化输入输出
%-nd:数字左对齐,且输出要占n个字符空间
%9.2 f \ n
包括小数点和小数一共占9个字符,保留两位小数
#include<stdio.h>
int main(int argc,char const *argv)
{
printf("%*d,%d\n",12,3,456);
return 0;
}
12填入*的位置,表示这一个%d的输出占据12个字符
作为参数,可以填入变量
printf("%hhd",12345);
输出结果:57
过程:12345的十六进制为0x3039,取后面两位39,转换成十进制为57
到%n的时候已经输出了多少个字符,把这个数字填到num指针里面去
%[^,] :读入到“,”前的内容
#include<stdio.h>
int main(int argc,char const *argv)
{
int num;
int a;
int i1=scanf("%d",&a);
int i2=printf("%d\n",a);
printf("%d:%d\n",i1,i2);
return 0;
}
文件输入输出
- 用>和<做重定向
#include<stdio.h>
int main(int argc,char const *argv)
{
FILE*fp=fopen("file文件名","r");
if(fp){
fscanf(fp,...);
fclose(fp);
}else{
...
}
return 0;
}
#include<stdio.h>
int main(int argc,char const *argv)
{
FILE*fp=fopen("dev文件","r");
if(fp){
int num;
fscanf(fp,"%d",&num);
printf("%d\n",num);
fclose(fp);
}else{
printf("无法打开文件\n");
}
return 0;
}
二进制文件
sprintf字符串输出
sprintf(format,“%%%ds”,STR_LEN-1);
printf(format,astu[i].name);
创建一个格式字符串format,放到printf里
位运算
按位运算
移位运算
按位运算的结果一般是int
- 往左移不管符号位,往右移保持符号
- 移位的位数没有复数
位运算例子
- 输出一个数的二进制
#include<stdio.h>
int main(int argc,char const *argv)
{
int number;
scanf("%d",&number);
unsigned mask=1u<<31;
//左移31个比特位,就是100000...
for(;mask;mask>>=1){//每次右移一位
printf("%d",number&mask?1:0);
//&:都为1则输出1,否则都为0
//看输入的数的二进制,这一位是1,就输出1
//如果是0,就输出0
}
printf("\n");
return 0;
}
位段
数字:这个成员占几个比特
#include<stdio.h>
void prtbin(unsigned int number);
struct u0{
unsigned int leading:3;//占3个比特位
unsigned int flag1:1;//1个int有32个比特位
unsigned int flag2:1;
int trailing:27;
};
int main(int argc,char const*argv[])
{
struct u0 uu;
uu.leading=2;
uu.flag1=0;
uu.flag2=1;
uu.trailing=0;
printf("sizeof(uu)=%lu\n",sizeof(uu));
prtbin(*(int*)&uu);
return 0;
}
void prtbin(unsigned int number){
unsigned mask=1u<<31;
for(;mask;mask>>=1){
printf("%d",number&mask?1:0);
}
}
超过32个比特位sizeof就变成2个int的大小8
位段中成员的排列从低到高:
按照定义的顺序,最后定义的在左边