【问题标题】:Fscanf Doesn't Take Inputs properlyFscanf 不能正确地接受输入
【发布时间】:2022-01-15 20:25:19
【问题描述】:

我正在尝试使用fscanf 获取输入并将输出提供给另一个文件,但fscanf 没有提供它应该提供的输入。 这是我的代码:

#include <stdio.h>

int main() {
    FILE *a;
    FILE *b;
    int i;
    int played_matches, points, goaldif, ranking;
    int wins, draws, losses, goals_scored, goals_against;
    char team[18];
    a = fopen("source.docx", "r");
    b = fopen("aim.doc", "w");
    
    for (i = 0; i < 10; i++) {
        fscanf(a, "%d %s %d %d %d %d %d", &ranking, &team, &wins, &draws, &losses, &goals_scored, &goals_against);         
        played_matches = wins + draws + losses;
        points = (3 * wins) + draws;
        goaldif = goals_scored - goals_against;
        fprintf(b, "%d %s %d %d %d ", ranking, team, played_matches, points, goaldif);
    }

    fclose(a);
    fclose(b);
    return 0;
}

【问题讨论】:

  • &team 应该只是团队
  • 编译时开启更多警告。 example
  • 为什么你的纯文本文件有.docx扩展名?
  • 如果文件真的是.docx,那么你需要先找到一份docx规范的副本,然后才能考虑用C程序阅读它。或者,简单的做法是将数字复制/粘贴到纯文本文件.txt 中。确保它是文本文件,而不是富文本文件。
  • 输出文件也将是一个纯文本文件,所以正确的名称是 "aim.txt"。将其称为“aim.doc”不会使其成为 doc 文件。称其为真正含义以避免混淆。

标签: c input output scanf filereader


【解决方案1】:
#include <stdio.h>

int main() {
    FILE *a;
    FILE *b;
    int i;
    int played_matches, points, goaldif, ranking;
    int wins, draws, losses, goals_scored, goals_against;
    char team[18];
    a = fopen("source.txt", "r");
    b = fopen("aim.txt", "w");

    for (i = 0; i < 10; i++) {
        fscanf(a, "%d %s %d %d %d %d %d", &ranking, team, &wins, &draws, &losses, &goals_scored, &goals_against);
        played_matches = wins + draws + losses;
        points = (3 * wins) + draws;
        goaldif = goals_scored - goals_against;
        fprintf(b, "%d %s %d %d %d \n", ranking, team, played_matches, points, goaldif);
    }

    fclose(a);
    fclose(b);
    return 0;
} 



 & is for integer values. 



   

【讨论】:

  • 您还应该始终检查任何*scanf() 函数的返回值。您的输入可能格式不正确,导致您使用未初始化的变量。
猜你喜欢
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 2018-09-18
  • 1970-01-01
  • 2015-04-28
  • 1970-01-01
相关资源
最近更新 更多