1、完成标准io的单字符、字符串、格式化、模块化实现两个文件的拷贝;
#include<myhead.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<errno.h>
#include<time.h>
int main(int argc, const char *argv[])
{
FILE *fp =fopen(argv[1],"r");
if(fp==NULL)
{
perror("-1");
}
FILE *op=fopen(argv[2],"w" );
if(op==NULL)
{
perror("-1");
}
char buf =0;
int count;
while(1)
{
buf=fgetc(fp);
if(buf==EOF)
{
break ;
}
fputc(buf,op);
}
fclose(fp);
fclose(op);
}
#include<myhead.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<errno.h>
#include<time.h>
int main(int argc, const char *argv[])
{
FILE *fp =fopen(argv[1],"r");
if(fp==NULL)
{
perror("-1");
}
FILE *op=fopen(argv[2],"w" );
if(op==NULL)
{
perror("-1");
}
char buf[100] =" ";
while(1)
{
char*s=fgets(buf,sizeof(buf),fp);
fputs(buf,op);
if(s==NULL)
{
break;
}
}
fclose(fp);
fclose(op);
}
#include<myhead.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<errno.h>
#include<time.h>
int main(int argc, const char *argv[])
{
FILE *fp =fopen(argv[1],"r");
if(fp==NULL)
{
perror("-1");
}
FILE *op=fopen(argv[2],"w" );
if(op==NULL)
{
perror("-1");
}
float num;
int y,m,r,h,min,s;
while(fscanf(fp,"%f %d-%d-%d %d:%d:%d", &num,&y,&m,&r,&h,&min,&s )==7)
{
fprintf(op,"%.2f,%04d-%02d-%02d %02d:%02d:%02d\n", num,y,m,r,h,min,s );
}
fclose(fp);
fclose(op);
}
、
#include<myhead.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<errno.h>
#include<time.h>
int main(int argc, const char *argv[])
{
FILE *fp =fopen(argv[1],"r");
if(fp==NULL)
{
perror("-1");
}
FILE *op=fopen(argv[2],"w" );
if(op==NULL)
{
perror("-1");
}
char arr[256]="0";
fread(arr,sizeof(arr),1,fp);
fwrite(arr,1,strlen(arr),op);
fclose(fp);
fclose(op);
}
#include<myhead.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<errno.h>
#include<time.h>
int main(int argc, const char *argv[]) {
FILE *fp = fopen(argv[1], "a+"); // 以追加和读写模式打开文件
if (fp == NULL) {
perror("-1");
return 1; // 退出程序
}
while (1) {
printf("1. 登录\n");
printf("2. 注册\n");
int a = 0;
scanf("%d", &a);
getchar(); // 清除换行符
switch (a) {
case 1: {
char arr[9] = "";
char brr[20] = "";
printf("请输入账号:\n");
fgets(arr, sizeof(arr), stdin);
printf("请输入密码:\n");
fgets(brr, sizeof(brr), stdin);
arr[strcspn(arr, "\n")] = '\0'; // 去掉换行符
brr[strcspn(brr, "\n")] = '\0'; // 去掉换行符
// 重新设置文件指针到开头
fseek(fp, 0, SEEK_SET);
char bcc[9]; // 从文件中读取的账号
char baa[21]; // 从文件中读取的密码
int found = 0; // 用于标记是否找到匹配的账号和密码
while (fgets(bcc, sizeof(bcc), fp) != NULL) {
// 读取账号
bcc[strcspn(bcc, "\n")] = '\0'; // 去掉换行符
printf("读取的账号: %s\n", bcc); // 调试输出
if (fgets(baa, sizeof(baa), fp) == NULL) {
break; // 如果没有密码了,退出循环
}
baa[strcspn(baa, "\n")] = '\0'; // 去掉换行符
printf("读取的密码: %s\n", baa); // 调试输出
// 检查账号和密码是否匹配
if (strcmp(bcc, arr) == 0 && strcmp(baa, brr) == 0) {
printf("登录成功\n");
found = 1; // 设置为找到
break; // 找到匹配后退出循环
}
}
// 如果没有找到匹配的账号和密码
if (!found) {
printf("账号或密码错误,请重新输入或注册\n");
}
break;
}
case 2: {
printf("请输入账号:");
char crr[9] = "";
fgets(crr, sizeof(crr), stdin);
crr[strcspn(crr, "\n")] = '\0'; // 去掉换行符
fputs(crr, fp);
fputs("\n", fp);
printf("请输入密码:");
char drr[20] = "";
fgets(drr, sizeof(drr), stdin);
drr[strcspn(drr, "\n")] = '\0'; // 去掉换行符
fputs(drr, fp);
fputs("\n", fp);
printf("添加成功\n");
// 读取并输出文件内容以确认写入
printf("当前文件内容:\n");
fseek(fp, 0, SEEK_SET);
char line[50]; // 存储一行的缓冲区
while (fgets(line, sizeof(line), fp) != NULL) {
printf("%s", line);
}
break;
}
default:
printf("无效的选择,请重新输入\n");
break;
}
}
fclose(fp);
return 0;
}