我一直在尝试阅读具有特定结构的 txt: 第一行表示整个txt文件有n-1行。 所有其他行都具有卡片的“结构”(它是数字和图案)。
例如:我有一个存储 13 张卡片的 txt,所以文件本身有 14 行:
13
A T
2 P
3 D
13 P
2 P
4 C
8 D
11 T
8 C
9 C
10 T
9 T
7 P
(注意:T 代表梅花,D 代表方 block ,C 代表红心,P 代表黑桃,这是西类牙语)。 我已经尝试提取第一行,然后用给定的数字创建一个动态数组,以便我可以将每一行存储在该数组中,但我无法获得第一个值。
我的代码是:
#include <stdio.h>
#include <stdlib.h>
int leerLinea(){
char contenido[1];
FILE* pArchivo;
pArchivo = fopen("Mazo.txt","r");
if (pArchivo == NULL){
printf("No hay nada aqui!\n");
return 0;
}
else{
fgets(contenido,3,pArchivo);
printf("%s\n", contenido);
}
fclose(pArchivo);
return contenido[0];
}
int main(){
int a;
a = leerLinea();
printf("a's value is: %d\n",a);
return 0;
}
但是当我运行它时我得到:
13
a's value is: 49
为什么它应该返回 13 而返回其他值?
最佳答案
使用 fgets(contenido,3,pArchivo)
,您将字符串读入缓冲区,该缓冲区对于捕获至少 2 位数字和字符串终止字符而言太小;对于该语句,它至少应为 char contenido[3]
。
然而,主要问题是您将字符串与“纯”整数值混合在一起,即您读入了一个字符串,但期望通过访问该字符串的第一个数字即可将其正确转换为数字;请注意,如果 contenido
包含 "13"
,contenido[0]
将给出字符值 '1'
,这在 ASCII 中是 49
。
为了克服这个问题,将值作为数字读入,即使用 "%d"
-format:
int leerLinea(){
int contenido = 0;
FILE* pArchivo;
pArchivo = fopen("Mazo.txt","r");
if (pArchivo == NULL){
printf("No hay nada aqui!\n");
return 0;
}
else{
fscanf(pArchivo,"%d",&contenido);
printf("%d\n", contenido);
}
fclose(pArchivo);
return contenido;
}
关于c - 读取文本的第一行并将其转换为 int,但返回另一个值 [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46594896/