思路:
1、用变量接收输入。
2、读取文件内容到内存中(比如用链表保存)。
3、循环遍历内存数据,对比输入的值,存在相同则表示已存在。
下面代码是我写得演示:
#include <stdioh>
#include <stdlibh>
#include <malloch>
#include <windowsh>
#define P "C:\\1txt"
typedef struct stu_info
{
int sNum;// 学号
char name[20];//姓名
struct stu_info next;
}SINFO;
int insert2File(char path[]);// 向文件末尾插入一条学生信息
SINFO selectALLFILE(char path[]);//只读模式打开文本,获取信息, 返回信息链表头节点(该函数单独调用的话,记得调用freeSINFOS释放内存)
int checkSN(SINFO sinfo,char path[]);//检查路径下文件中,学号是否存在,存在返回1,否则返回0
int freeSINFOS(SINFO sHead);//释放链表内存
void showSINFOS(SINFO sHead);//打印链表信息
int main()
{
SINFO sHead=NULL;
while(1)
{
sHead=selectALLFILE(P);
showSINFOS(sHead);
insert2File(P);
free(sHead);
sHead=NULL;
printf("按任意键继续录入。。。\n"),getchar();
system("cls");
}
return 0;
}
void showSINFOS(SINFO sHead)
{
printf("当前从文件加载到内存中的信息为:\n");
if(sHead && sHead->next)
while(sHead->next)
{
printf("学号:%d 姓名:%s\n",sHead->next->sNum,sHead->next->name);
sHead=sHead->next;
}
}
int insert2File(char path[])
{
SINFO sinfo;
FILE fp=NULL;
if(!(fp=fopen(path,"at+")))return 0;
printf("请输入要插入的学生信息:\n");
printf(" 学号:"),scanf("%d",&sinfosNum);
printf(" 姓名:"),scanf("%s",sinfoname),getchar();
if(checkSN(sinfo,path))
{
printf("当前学号已存在!新增失败!\n");
return 0;
}
fprintf(fp,"%d %s\n",sinfosNum,sinfoname);
fclose(fp);
printf("新增信息插入成功!\n");
return 1;
}
SINFO selectALLFILE(char path[])//查询文件
{
SINFO sHead=NULL,sTail=NULL,sNew=NULL,sTemp;
FILE fp=NULL;
if(!(fp=fopen(path,"rt"))) return NULL;
fseek(fp,0,SEEK_SET);
sHead=(SINFO )malloc(sizeof(SINFO));
if(!sHead)return NULL;
sHead->next=NULL;
while(fscanf(fp,"%d %s\n",&sTempsNum,sTempname)!=-1)
{
sNew=(SINFO )malloc(sizeof(SINFO));
if(!sNew)return NULL;
sNew->next=NULL;
sNew->sNum=sTempsNum;
sprintf(sNew->name,"%s",sTempname);
if(!sHead->next)
sHead->next=sNew;
else
sTail->next=sNew;
sTail=sNew;
}
fclose(fp);
return sHead;
}
int checkSN(SINFO sinfo,char path[])//检查学号是否存在,存在返回1,否则返回0
{
SINFO sHead=NULL;
sHead=selectALLFILE(path);
if(!sHead) return 0;
if(!sHead->next) {freeSINFOS(sHead);return 0;}
while(sHead->next)
{
if(sinfosNum==sHead->next->sNum) return 1;
sHead=sHead->next;
}
freeSINFOS(sHead);
return 0;
}
int freeSINFOS(SINFO sHead)
{
SINFO sTemp=NULL;
if(!sHead)return 1;
while(sHead->next)
{
sTemp=sHead->next->next;
free(sHead->next);
sHead->next=sTemp;
}
free(sHead);
return 1;
}
对于数组type a[N], 要将其写入文件有两种方式可以使用。
1 将数组以二进制方式写入文件。如
fwrite(a, sizeof(a), 1, fp);
可以将数组整体以二进制方式写入文件中。
2 按照元素,依次写入文件。具体写入格式与数组的类型有关。如为int数组可以写作:
int i;
for(i = 0; i < N; i++)
fprintf("%d,", a[i]);
两种方法各有优缺点:
1 代码量上,第一种方式更简单高效;
2 运行效率上,第一种方法的执行效率更高;
3 文件空间大小上:
如果数组中的字符串元素较多,那么二者写入后目标文件大小相似,或者第二种方式占用的空间较小。
如果数组中的整型或浮点型数据较多,那么第一种方式占用的空间较小。
4 目标文件可读性:
第一种方法得到的文件是二进制文件,需要用专门的阅读器打开,且必须是专业人士才可以读懂。
第二种方法更直观,直接打开文本文件就可以阅读输出结果。
从键盘输入一行字符,写入一个文件, 再把该文件内容读出显示在屏幕上。
#include<stdioh>
main()
{
FILE fp;
char ch;
if((fp=fopen("string","wt+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
printf("input a string:\n");
ch=getchar();
while (ch!='\n')
{
fputc(ch,fp);
ch=getchar();
}
rewind(fp);
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
printf("\n");
fclose(fp);
}
以上就是关于c语言录入文件信息时如何确定某一学号的人已存在全部的内容,包括:c语言录入文件信息时如何确定某一学号的人已存在、c语言怎么把一个数组里的值存入文本文件里、C语言如何将字符串写入文本文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)