Слияние кода завершено, страница обновится автоматически
#include<stdio.h>
#include <stdlib.h>
FILE *openfile(char *openmode){ /*打开文件*/
FILE *fp;
if((fp=fopen("d.dat",openmode))==NULL){
printf("File open error!\n");
exit(0);
}
return (fp);
}
int inputchioce(void){
int choice;
printf("#####################################\n"); /*显示操作提示信息*/
printf("## 请输入: ##\n");
printf("## 1.输入数据,并保存保存到文件。 ##\n");
printf("## 2.打开数据文件,并查找 ##\n");
printf("## 3.退出。 ##\n");
printf("#####################################\n");
scanf("%d",&choice);
return choice;
}
void ADDdate(FILE *fp){ /*输入若干个整数,并保存*/
long num;
int cnt=0;
printf("请输入若干个整数,每个整数之间用空格隔开,按^D结束输入。\n");
while(~scanf("%d",&num)){
fwrite(&num,sizeof(long),1,fp);
cnt++;
}
printf("成功写入%d个整数\n",cnt);
if(fp!=NULL&&fclose(fp)){ /*关闭文件*/
printf("Can not close the file!\n");
exit (0);
}
}
long countL(FILE *fp){ /*计算文件中整数的数目*/
long begin,end,longcount;
fseek(fp,0L,SEEK_SET);
begin=ftell(fp);
fseek(fp,sizeof(long),SEEK_END);
end=ftell(fp);
longcount=(end-begin)/sizeof(long)-1;
return longcount;
}
void search(int *argc,char *argv[],FILE *fp){ /*查询指定整数*/
long num,s;
int a,b; /*玄学调bug之处(1) (?`?′)? ┫:?‘∵:.┻┻:?‘.:∵ */
int cntnum=0,flag=0;
int i;
printf("请输入待查找的整数\n");
if(*argc>1){ /*检查命令行是否带参数(1)*/
s=atoi(argv[2]);
printf("%d\n",s);
*argc=1;
}else{
scanf("%ld",&s);
}
long count=countL(fp);
//printf("count=%ld\n",count);/////////////
rewind(fp);
for ( i = 0; i < count;i++){
fread(&num,sizeof(long),1,fp);
//printf("num=%d,s=%d##%d\n",num,s,(num==s));/////////////////
a=(long)num; /*玄学调bug之处(1)续,强制类型转换*/
b=(long)s;
//printf("a=%d,b=%d\n",a,b);//////////////////
cntnum++;
if(a==b){
printf("%d位于第%d个数\n",s,cntnum);
flag++;
}
}
if(flag==0) printf("NOT FOUND!\n");
}
int main(int argc,char *argv[])
{
FILE *fp;
int choice;
if(argc>1){ /*检查命令行是否带参数(1)*/
choice=atoi(argv[1]);
}else{
choice=inputchioce();
}
while(1){
if (choice==3){ /*输入3,退出*/
printf("*** EXIT ***\n");
break;
}
switch(choice){
case 1: /*若输入1,输入若干个整数,并保存*/
fp=openfile("ab+");
ADDdate(fp);
break;
case 2: /*查询指定整数*/
fp=openfile("rb");
search(&argc,argv,fp);
break;
default:
printf("Input Error\n"); /*提示输入非法*/
break;
}
choice=inputchioce();
}
if(fp!=NULL&&fclose(fp)){ /*关闭文件*/
printf("Can not close the file!\n");
exit (0);
}
return 0;
}
/*
//////////////为添加调试输出的地方,记得删除或注释掉
*/
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )