gpt4 book ai didi

c - 如何用C语言将文件中的数据存储到数组中

转载 作者:行者123 更新时间:2023-11-30 17:24:59 26 4
gpt4 key购买 nike

所以,基本上下面的代码需要用户首先登录,然后在用户登录后它将显示用户详细信息,如存储在 user.txt 中的详细信息。之后我不知道如何从文件中检索文件,然后将其作为数组返回,以便我可以更新,例如更改用户的名称,或通过获取数组索引删除用户详细信息

这是我的代码

#include <stdio.h>
#include <string.h>

typedef struct {
char fullname[30];
char dob [10];
int contactNo;
int postcode;

}userDetails;


int main ()
{
char username [15];
char pwd [20];
char user_pass [30];
char userfile [100];
FILE *user;
FILE *admin;

userDetails myUser;

admin = fopen ("admin.txt","r");
printf("Please enter your Username\n");
scanf("%s",username);

printf("Please enter your Password\n");
scanf("%s",pwd);

user_pass[strlen(username) + strlen(pwd) + 2];
sprintf(user_pass, "%s;%s", username, pwd);

while (fgets(userfile, 100, admin) != NULL) {
if (strcmp(userfile, user_pass) == 0) {
printf("Authentication as %s successful\n", username);

size_t nread; // Printing the user information
user = fopen("user.txt", "r");
printf("\nHere is the registered user:\n");

if (user) {
while ((nread = fread(myUser.fullname, 1, sizeof myUser.fullname, user)) > 0)
fwrite(myUser.fullname, 1, nread, stdout);
if (ferror(user)) {
}
fclose(user);
}
}
else{
printf("Please enter correct username and password\n");
}
}
}

假设在 user.txt 中文件以这样的格式存储

约翰;1990年12月12日;+6017012682;57115

保罗;12/12/1221;+60190002122;100022

最大;1990年12月11日;+60198454430;900000

杰米;12/05/2000;+60190001231;18000

谢谢

最佳答案

如何从文件中读取数据并将其存储到数组中,然后读取数组中特定存储的数据进行编辑

存储数据的步骤:

1) - 声明支持您的概念所需的存储变量类型。也许是结构数组。
2) - 打开文件 ( FILE *fp = fopen("file path", "r"); )
3) - 循环使用 fgets() 读取文件的每一行(记录)
4) - 解析行,可能使用 strtok 并将每行的元素放入您上面创建的存储变量中。
5) - 关闭文件 ( fclose(fp); )

获取记录部分可以通过选择一条记录,并返回由原始记录的每个字段组成的重新连接的字符串来完成。原型(prototype)可能如下所示:

void GetRecord(RECORD *pRec, int rec, char *recordStr);  

存储将被创建为结构体数组,并且该结构体将容纳您引用的 4 个字段,例如:

John;12/12/1990;+6017012682;57115//具有 4 个字段的示例记录

#define MAX_RECORDS 10  //arbitrary value, change as needed
typdef struct {
char name[260];
char date[11];
char num1;
char num2;
} RECORD;
RECORD record[MAX_RECORDS];//change size to what you need, 10 is arbitrary for illustration

代码示例将数据读入记录并检索记录,可能如下所示:
(仅作为示例,很少进行错误检查)

void GetRecord(RECORD *pRec, int rec, char *record);

int main(void)
{
FILE *fp = {0};
char recStr[260];
char *buf;
char line[260];
int i;
char strArray[3][7];//simple array, 3 string of 7 char each (enough for NULL terminator)
i = -1;
fp = fopen ("admin.txt", "r");
if(fp)
{
while (fgets (line, 260, fp))//will continue to loop as long as there is a new line
{
i++;
if(i >= MAX_RECORDS) break;//reached maximum records defined, time to leave
buf = strtok(line, ";");
if(buf)
{
strcpy(record[i].name, buf);
buf = strtok(NULL, ";");
if(buf)
{
strcpy(record[i].date, buf);
buf = strtok(NULL, ";");
if(buf)
{
record[i].num1 = atoi(buf);
buf = strtok(NULL, ";");
if(buf)
{
record[i].num2 = atoi(buf);
}
}
}
}
}

}
fclose(fp);
// 2nd argument valid values range from 1 - n (not 0 - n)
GetRecord(record, 3, recStr); //read third record into string "rec"

return 0;
}

void GetRecord(RECORD *pRec, int rec, char *record)
{
int r = rec - 1;//adjust for zero indexed arrays
if((r >= MAX_RECORDS) || (r < 0))
{
strcpy(record, "index error");
return;
}
sprintf(record, "%s;%s;%d;%d", pRec[r].name, pRec[r].date, pRec[r].num1, pRec[r].num2);
}

注意: “因为[你]匆忙复制代码,不小心删除了重要的内容”
我没有严格遵守您的变量名称。调整我所做的以满足您的需求。

输入文件的结果如下所示:

enter image description here

关于c - 如何用C语言将文件中的数据存储到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27152576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com