【问题标题】:Skipping line from .TXT file [duplicate].TXT 文件中的跳线 [重复]
【发布时间】:2013-05-05 12:48:03
【问题描述】:

您好,我的项目有一点问题。我想将 .TXT 文件中的文本扫描到我的结构中,除了我的文本文件的第一行。我试图用fgets() 函数来做到这一点,但它只在第一次工作。

这是我工作中的一点努力。

 for (i=1;i<=number;i++){
    fgets(s,100,fr);
    fgets(p_akt->signatura,12,fr);
    fgets(p_akt->isbn,15,fr);
    fgets(p_akt->kniha,100,fr);
    fgets(p_akt->autori,100,fr);
    fscanf(fr,"%d",&p_akt->datum);
    fscanf(fr,"%d",&p_akt->preukaz);

    printf("%d.\n",i);
    printf("signatura: %s",p_akt->signatura);
    printf("isbn: %s",p_akt->isbn);
    printf("kniha: %s",p_akt->kniha);
    printf("autori: %s",p_akt->autori);
    printf("datum: %d\n",p_akt->datum);
    printf("preukaz: %d\n",p_akt->preukaz);

    p_akt->p_dalsi = NULL;
}

正如我所说,它的运行方式与我只希望第一个循环完全一样......当它进入第二个循环时,它将每一个信息移动 1,所以在 isbn 中我有 signatura,在 kniha 我有 isbn 等。我希望我做到了一切都清楚。谢谢

编辑://

---
DE612301
9783161484100
Gesammelte Werke 3. Logik der Forschung
Karl R. Popper
20120508
56432
---
EN3123123
9780061092190
Men at Arms
Terry Pratchett
20101010
45612

这是我的文本文件,我想用这些信息填充我的结构,除了 ---

【问题讨论】:

    标签: c file file-io


    【解决方案1】:

    因为您使用fscanf 读取了datepreukaz 字段:

    fscanf(fr,"%d",&p_akt->datum);
    fscanf(fr,"%d",&p_akt->preukaz);
    

    preukaz 填满后不读取换行符。将格式从%d更改为%d\n后:

    fscanf(fr,"%d\n",&p_akt->datum);
    fscanf(fr,"%d\n",&p_akt->preukaz);
    

    也会读取换行符,在下一个循环中,fgets(s,100,fr); 将正确读取分隔符 ---

    【讨论】:

    • 这实际上并没有那么好......第一个循环运行良好我将上传文本文件也许它会帮助你们理解
    • 请在原始问题中添加您输入文件的摘录(前 2-3 条完整记录)。
    • @Toesmash:看看我更新的答案。您正确地跳过了第一行并且在读取整数时遇到了问题。
    猜你喜欢
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 2019-11-27
    相关资源
    最近更新 更多