按字符读取文件
int main() {
FILE *fp = fopen("./a.txt", "r");
if (!fp) {
printf("%s\n", "文件打开失败");
return EXIT_FAILURE;
}
int ch;
while ((ch = fgetc(fp)) != EOF) {
printf("%c", ch);
}
fclose(fp);
return EXIT_SUCCESS;
}
按字符写入文件
int main() {
FILE *fp = fopen("./a.txt", "w");
if (!fp) {
printf("%s\n", "文件写入失败");
return EXIT_FAILURE;
}
putc('A', fp);
fclose(fp);
return EXIT_SUCCESS;
}
向文件追加内容
int main() {
FILE *fp = fopen("./a.txt", "a");
if (!fp) {
printf("%s\n", "文件写入失败");
return EXIT_FAILURE;
}
fputc('B', fp);
fclose(fp);
return EXIT_SUCCESS;
}
按行读取文件内容
int main() {
FILE *fp = fopen("./a.txt", "w");
if (!fp)return EXIT_FAILURE;
fputs("今天是个好日子\n", fp);
fputs("今天天气不错\n", fp);
fputs("今天你好漂亮\n", fp);
fflush(fp);
fclose(fp);
FILE *readFile = fopen("./a.txt", "r");
char *buf = malloc(sizeof(char) * 1024);
while (feof(readFile) == 0) {
memset(buf, 0, 1024);
fgets(buf, 1024, readFile);
printf("%s", buf);
}
if (buf) {
free(buf);
}
fclose(readFile);
return EXIT_SUCCESS;
}
格式化读写文件
int main() {
FILE *wf = fopen("./a.txt", "w");
if (!wf)return EXIT_FAILURE;
int a = 10, b = 20;
fprintf(wf, "%d+%d=%d\n", a, b, (a + b));
fclose(wf);
FILE *rf = fopen("./a.txt", "r");
if (!rf)return EXIT_FAILURE;
int c, d, e;
fscanf(rf, "%d+%d=%d\n", &c, &d, &e);
printf("%d+%d=%d\n", c, d, e);
fclose(rf);
return EXIT_SUCCESS;
}
练习
enum Operator {
add, minus, multiply, divide
};
struct Calculation {
int num1;
int num2;
char c;
int result;
};
typedef struct Calculation Calculator;
int main() {
srand((unsigned int) time(NULL));
FILE *wf = fopen("./a.txt", "r+");
if (!wf)return EXIT_FAILURE;
int a, b;
char c;
char buf[20];
for (int i = 0; i < 100; i++) {
switch (rand() % 4) {
case add:
c = '+';
break;
case minus:
c = '-';
break;
case multiply:
c = '*';
break;
case divide:
c = '/';
break;
default:
c = '+';
break;
}
a = rand() % 10 + 1;
b = rand() % 10 + 1;
memset(buf, 0, 20);
sprintf(buf, "%d %c %d =\n", a, c, b);
fputs(buf, wf);
}
fclose(wf);
Calculator *cal = malloc(sizeof(Calculator) * 100);
FILE *rf = fopen("./a.txt", "r+");
if (!rf)return EXIT_FAILURE;
for (int j = 0; j < 100; j++) {
fscanf(rf, "%d %c %d =\n", &cal[j].num1, &cal[j].c, &cal[j].num2);
switch (cal[j].c) {
case '+':
cal[j].result = cal[j].num1 + cal[j].num2;
break;
case '-':
cal[j].result = cal[j].num1 - cal[j].num2;
break;
case '*':
cal[j].result = cal[j].num1 * cal[j].num2;
break;
case '/':
cal[j].result = cal[j].num1 / cal[j].num2;
break;
default:
break;
}
}
fclose(rf);
FILE *retFile = fopen("./a.txt", "r+");
if (!retFile)return EXIT_FAILURE;
for (int k = 0; k < 100; k++) {
fprintf(retFile, "%d %c %d = %d\n", cal[k].num1, cal[k].c, cal[k].num2, cal[k].result);
}
fclose(retFile);
if (cal)free(cal);
return EXIT_SUCCESS;
}
#define NUM_COUNT 500000
#define NUM_RANGE 1000
int main() {
srand((unsigned int) time(NULL));
FILE *randomFile = fopen("./a.txt", "w");
if (!randomFile)return EXIT_FAILURE;
for (int i = 0; i < NUM_COUNT; ++i) {
fprintf(randomFile, "%d\n", rand() % NUM_RANGE + 1);
}
fclose(randomFile);
unsigned int start = (unsigned int) time(NULL);
FILE *readFile = fopen("./a.txt", "r");
if (!readFile)return EXIT_FAILURE;
int arr[NUM_RANGE] = {0};
int value;
for (int j = 0; j < NUM_COUNT; j++) {
fscanf(readFile, "%d\n", &value);
arr[value - 1]++;
}
fclose(readFile);
FILE *writeFile = fopen("./b.txt", "w");
if (!writeFile)return EXIT_FAILURE;
for (int k = 0; k < NUM_RANGE; k++) {
for (int i = 0; i < arr[k]; i++) {
fprintf(writeFile, "%d\n", k + 1);
}
}
fclose(writeFile);
unsigned int end = (unsigned int) time(NULL);
printf("排序时间为:%d(s)\n", (end - start));
return EXIT_SUCCESS;
}