【问题标题】:How to include values from files into your code如何将文件中的值包含到代码中
【发布时间】:2018-04-03 10:47:34
【问题描述】:

我有这个结构学生记录,我想暂时用两个文件 NamesIDsDataFile 和 MarksDataFile 中的值填充,但是当我运行循环时,只有 NamesIDsDataFile 中的值进入结构。我已将 print 语句放在 while 循环中,以查看问题所在,当我运行代码时,什么也没有打印出来。有人可以解释如何从 MarksDataFile 打印值。

struct StudentRecord {

char FirstNames[MAXLENGTH];
char LastNames[MAXLENGTH];
int IDNums;
int Marks;

};

    FILE * NamesIDsDataFile;
    FILE * MarksDataFile;

    while (fscanf(NamesIDsDataFile,"%s%s%d",&(SRecords.FirstNames[0]), 
    &(SRecords.LastNames[0]), &(SRecords.IDNums)) != EOF) {

        fscanf(MarksDataFile,"%d",&(SRecords.Marks));

        printf("%d", SRecords.Marks);

    }

    fclose(NamesIDsDataFile);
    fclose(MarksDataFile);

【问题讨论】:

  • 第 1 步:fscanf(...) != EOF --> fscanf(...) == 3。 2:发布样本输入、输出和预期输出。
  • 我假设您在某处打开这些文件?
  • 你能展示一下这两个文件的几个示例数据吗?
  • 我的回答有帮助你解决吗? :)

标签: c while-loop fopen


【解决方案1】:

通过对代码稍作更改来实现这一点的简单方法是:

while (fscanf(NamesIDsDataFile," %s %s %d ",&(SRecords.FirstNames[0]), 
    &(SRecords.LastNames[0]), &(SRecords.IDNums)) != EOF) 
{
      fscanf(MarksDataFile," %d ",&(SRecords.Marks));

      printf("%d", SRecords.Marks);
}

但是,如果文本文件并不总是相同并且结构不是很好,则不应使用上述代码,而应使用以下代码。

这是最好的方法:

int ret1,ret2;
while (ret =fscanf(NamesIDsDataFile," %s %s %d ",&(SRecords.FirstNames[0]), 
&(SRecords.LastNames[0]), &(SRecords.IDNums))) {

    if(ret == EOF)
    {
        break;
    }
    else
    {
        ret2 = fscanf(MarksDataFile," %d ",&(SRecords.Marks));
        if(ret2 == EOF || ret2 == 0)
        {
            break;
        }else
        {
            printf("%d", SRecords.Marks);

        }
    }
}

fclose(NamesIDsDataFile);
fclose(MarksDataFile);

ret 是一个 int 变量,其值为:

  • EOF,如果指针到达文件末尾。
  • 0,如果没有输入与变量匹配
  • >0,与文件输入匹配的变量数

【讨论】:

  • 我已经更新了答案,因为代码有错误。现在它应该工作了。!如果可行,请检查并选择作为答案:)
猜你喜欢
  • 2015-08-16
  • 1970-01-01
  • 2018-03-15
  • 2012-08-19
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 2018-10-09
  • 2019-01-01
相关资源
最近更新 更多