gpt4 book ai didi

将 FILE 中的字符串与其他字符串进行比较

转载 作者:太空宇宙 更新时间:2023-11-04 04:20:33 25 4
gpt4 key购买 nike

我试图用 strcmp() 比较 2 个字符串。其中一个是通过键盘实现的,但另一个是从文件中扫描的,所以我使用 fgets(vec[i].nombre,80,fentrada); 其中“vec”是一个 vector typedef 结构,带有一个名为“nombre”的 char 变量。问题是虽然我输入了从文件中获取的完全相同的字符串,但它不返回 0。我将最大字符数限制为文件中字符串的长度,并且它可以正常工作,所以必须有一些东西与空格有关。但重点是让它适用于任何长度的字符串。

这是结构:

typedef struct f{
int dia;
int mes;
int anno;
};
typedef struct pelicula{
char nombre[80];
float nota;
f fecha;
}peliculas;
peliculas vec[dim];

这是扫描文件中内容的句子。

FILE *fentrada=fopen("peliculas.dat","rt");
while(!feof(fentrada)){
fgets(vec[i].nombre,80,fentrada);
fscanf(fentrada,"%i",&vec[i].fecha.dia);
fscanf(fentrada,"%i",&vec[i].fecha.mes);
fscanf(fentrada,"%i",&vec[i].fecha.anno);
fscanf(fentrada,"%f\n",&vec[i].nota);
i++;
printf("\n");
}

这是我比较字符串的地方:

int i=0,j=0;
char *nombre,cos[46],c[66];
strcpy(c,vec[i].nombre);
gets(cos);
printf("%s\n",c);
printf("%i",strcmp(cos,c));

文件是这样的:

Casa Blanca
4 11 2013
6
Mi villano favorito
5 11 2013
7
Crepusculo
6 11 2013
8

P.D,我试过使用 scanf(%s) 而不是 fgets,但它只扫描“Casa”,然后扫描“Blanca”,所以我得到 6 个元素而不是 3 个...

最佳答案

可能出现的问题:

您使用 fgets 从文件中读取的行包含换行符,但 gets 没有。同时使用 feof(file) 是不可取的

解决方案:

使用 fscanf 而不是 fgets。它返回一个整数值,表示与文件输入匹配的值的数量。

fscanf returns the number of input items successfully matched and assigned, which can be fewer than provided for, or even zero in the event of an early matching failure.

代码:

只需更改扫描文件行的代码

int ret;
while(ret = fscanf(fentrada,"%[0-9a-zA-Z ] %d %d %d %d ", vec[i].nombre, &vec[i].fecha.dia, &vec[i].fecha.mes, &vec[i].fecha.anno, &vec[i].nota))
{
if(ret == EOF)
{
break;
}else
{
// printf("\n %d",ret);
// ^ prints how many values are successfully matched
}
}

注意:我已经根据您的输入检查了这段代码。它工作正常并返回 0 作为 strcmp

的输出

引用:fscanf - TutorialsPoint

关于将 FILE 中的字符串与其他字符串进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47408607/

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