gpt4 book ai didi

比较文件中的字符串

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

我遇到了一些问题。我希望程序搜索文件,如果它与用户的输入匹配,则程序将显示“hello”,如果不匹配,则会显示“bye”。这些输出仅用于测试目的。回到问题。当到达比较线时,程序崩溃。现在我对如何解决这个问题一无所知。我请求有人帮助我,并提前致谢。下面是代码片段:

int CaseFunc();
int CaseFunc(){
FILE *memFile;
char memberfname[28];
char memberlname[28];
char ffname[28];
char flname[28];
char code;
struct PersonalInfo array[1000];
int memberage;
int menuANS;
int members;
int i;
members = 0;

printf("Enter your answer here: ");
scanf(" %d", &menuANS);

switch (menuANS){
case 1:
system("cls");
printf("Enter code: ");
scanf(" %c", &code);
do {
printf("Enter First Name: ");
scanf("%s", memberfname);
printf("Enter Last Name: ");
scanf("%s", memberlname);
printf("Enter Age: ");
scanf("%d", &memberage);

if ((memFile = fopen("TheCarDepot Members.txt", "a+")) == NULL){ //If the file path is incorrect, an error message is displayed
fprintf(stderr, "Error while opening file (%d: %s)\n",errno, strerror(errno)); //Error message that will be displayed if file path is incorrect
return;
}

fprintf (memFile, "%s %s %d", memberfname, memberlname, memberage);
fprintf (memFile, "\n");
fclose(memFile);
printf("\n\n");
printf ("*%s %s is now a member of TheCarDepot Team.*\n", memberfname, memberlname);

printf("Enter code: ");
scanf(" %c", &code);
}
while (code != 'x');
break;

case 2:
if ((memFile = fopen("TheCarDepot Members.txt", "r")) == NULL){ //If the file path is incorrect, an error message is displayed
fprintf(stderr, "Error while opening file (%d: %s)\n",errno, strerror(errno)); //Error message that will be displayed if file path is incorrect
return;
}

//while the file is opened and not at the end, the strings are stored into variables which forms an array of strings
for (members = 0; members < 200; members++) {
if (fscanf(memFile, "%s %s %d", memberfname, memberlname, &memberage) == 3) //Reads the contents of the file
break;
array[members].fname = strdup(memberfname);
array[members].lname = strdup(memberlname);
array[members].age = memberage;
}
fclose(memFile);

printf("Enter your first name: ");
scanf("%s", ffname);
printf("\n");

if (strcmp(array[members].fname, ffname) == 0){
printf ("hello");
}
else if (strcmp(array[members].fname, ffname) != 0){
printf ("bye");
}
break;

最佳答案

当退出for循环时,members可能等于200,这是一个未初始化的数组条目。将其传递给 strcmp 很容易导致崩溃。

此外,如果您因为 fscanf 成功而提前退出循环,则您的 array 条目也会被初始化。再次,这可能会导致崩溃。

在退出循环之前,您需要初始化array条目,并且需要在访问该数组条目之前进行检查以确保members小于200。

关于比较文件中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29333574/

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