我试图用strcmp()比较2个字符串。其中一个是通过键盘实现的,但另一个是从文件中扫描的,所以我使用fgets(vec[i].nombre,80,fentrada);
,其中“vec”是来自typedef结构的向量,其中一个char变量名为“nombre”。
问题是虽然我输入了从文件中获取的完全相同的字符串,但它不返回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个......
答案 0 :(得分:0)
您使用fgets
从文件中读取的行包含换行符,但gets
不包含。也不建议使用feof(file)
使用fscanf
代替fgets
。它返回一个整数值,表示与文件输入匹配的值。
fscanf返回成功匹配和分配的输入项的数量,可以少于提供的数量,或者在早期匹配失败的情况下甚至为零。
只需更改扫描文件行的代码
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