c - 读取文本的第一行并将其转换为 int,但返回另一个值 [C]

标签 c arrays string

我一直在尝试阅读具有特定结构的 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/

相关文章:

c - 具有数据结构的双指针运算

python - 链表在具有动态数组的语言中是否有任何值(value)?

c# - 计算字符串中笑脸出现的次数

php获取数组的数据大小

ios - 如何在 Swift 4 中更改文本字段中的文本时每 2 个字符后添加分隔符

java - 使用两个字符java多次分割字符串

c - 如何修改configure.ac以在最终Makefile中添加库目标?

c - 从数组中删除重复项

字符处理和字符迭代

javascript - 将递归键的名称传递给对象引用