【发布时间】:2018-05-04 15:38:24
【问题描述】:
我试图用 strcmp() 比较 2 个字符串。其中一个是通过键盘实现的,但另一个是从文件中扫描的,所以我使用fgets(vec[i].nombre,80,fentrada);,其中“vec”是来自 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
PD,我尝试使用 scanf(%s) 而不是 fgets,但它只扫描“Casa”,然后是“Blanca”,所以我得到 6 个元素而不是 3 个...
【问题讨论】:
-
拿起你的调试器,看看字符串是什么。请注意,
fgets()也将换行符存储在结果中。 -
使用
fgets读取的行在行尾包含'\n',而使用gets读取的行不包含。 BTWgets很久以前就被弃用了,不要将它用于现实世界的程序;或者最好不要使用它。 -
此外,使用
fgets()读取一行然后使用fscanf()读取3 个整数和float是很奇怪的(极端情况)。请记住,scanf()leaves the newline in the input buffer 和 Trailing white space in ascanf()format string is a UI disaster,尽管只要数据确实来自文件,就可以。 -
我的回答对你有帮助吗? @何塞