学习笔记1:文件写入
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *fp;
char ch, filename[20];
printf("Please input the filename you want to write: ");
scanf("%s", filename);
if (!(fp = fopen(filename, "wt+")))
{
printf("Cannot open the file!\n");
exit(0); //终止程序
}
printf("Please input the sentences you want to write: ");
ch = getchar();
ch = getchar();
while (ch != EOF) //EOF功能相当于Ctrl+z
{
fputc(ch, fp); //把输入的字符写入文件
ch = getchar();
}
fclose(fp); //关掉文件
}
学习笔记2:文件读取
fgetc()函数条用方法:ch = fgetc(fp);
从打开的文件中读取一个字符并送入ch中
几点说明:
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *fp;
char ch, filename[20];
printf("Please input the filename you want to write: ");
scanf("%s", filename);
if (!(fp = fopen(filename, "r")))
{
printf("Cannot open the file!\n");
exit(0); //终止程序
}
while (ch != EOF) //EOF功能相当于Ctrl+z
{
ch = fgetc(fp); // 把文件读出,存放在ch中
putchar(ch); //打印出ch
}
fclose(fp); //关掉文件
}
从一个二进制文件顺序读入字符:
while (! feof (fp))
{
ch = fgetc(fp);
}
运用文件的读取和写入,写一个【图片文件合成器】程序,实现“在图片里面捆绑rar”功能
学习笔记3:位运算符
注意:运算量只能是整型或字符型的数据
题目:编写一个程序,将输入的字母转换大小写
提示:A-Z —— 65-90 A的二进制 1000001
a-z —— 97-122 a的二进制 1100001
即表示大写字母和小写字母的区别在第五位,只要第五位是0就是大写,第五位是1就是小写
答案:
#include <stdio.h>
void main()
{
char ch;
printf("请输入一个字母:\n");
ch = getchar();
ch = getchar(); //输入两次是因为“回车”也同样在程序流中,程序会判断两次,加上这个就不会判断两次了
while (!(ch > 'A'&&ch < 'z') || (ch > 'Z'&&ch < 'a'))
{
printf("输入错误,请重新输入一个字母:\n");
ch = getchar();
}
if (ch & 32)
{
ch = ch & 223; //233的二进制是11011111,ch&233就是使第五位变成0
}
else
{
ch = ch | 255; //使第五位变成1
}
putchar(ch);
ch = getchar();
putchar(ch);
}
运行结果:
①一次ch = getchar()的结果:
②两次ch = getchar()的结果:
位运算赋值运算符:
&= , |= , >>= , ^=
a&=b 相当于 a=&b 其他类似
学习笔记4:位运算
题目1:去一个char a从右端开始的2~5位
答案:
#pragma warning(disable:4996)
#include <stdio.h>
void main()
{
int a, b, c, d;
printf("请输入待检验数字:");
scanf("%d", &a);
b = a >> 2;
c = ~(~0 << 4);
d = b & c;
printf("%d\n", d);
}
运行结果:
题目2:要求将a进行右循环移位 (循环移位就是把移出去的那一位保存起来,放到另一端开头)
#include <stdio.h>
#include <stdlib.h>
void main()
{
unsigned char a, b, c; //unsigned表示无符号
int n;
printf("请输入需要实现循环右移的数字:");
scanf("%d", &a);
printf("请输入需要实现右移的位数:");
scanf("%d", &n);
b = a << (sizeof(char) * 8 - n);
c = a >> n;
c = c | b;
printf("结果是:%c\n");
system("pause");
}
学习笔记5:位段 (现在不常用)
只支持Int 和 unsigned 定义