【问题标题】:Reading integers from a file in C [duplicate]从C中的文件中读取整数[重复]
【发布时间】:2012-10-17 23:06:15
【问题描述】:

我已经为此苦苦挣扎了很长时间,试图弄清楚,我猜这是一个非常愚蠢的菜鸟错误,但我无法弄清楚。

所以我试图从一个文件中读取一个整数,然后在其中做一些操作,为了这个问题我只是想在这里输出它:

FILE * pFile;
int number;
pFile = fopen ("myfile.txt","r");
if (pFile!=NULL) {
fscanf(pFile, "%d", number);
fclose (pFile);
}
printf("number: %i", number);
return 0;

myfile.txt 的内容:

123

但是当我运行它时,它什么也没读,而是说

RUN FAILED (exit value 1, total time: 32ms)

感谢大家的帮助

编辑:我忘了提,它作为一个字符串工作,它读取正确的数字,但我不能对它做任何操作,如果我将数字类型设置为加倍它可以工作但输出一些随机数数百万...

【问题讨论】:

  • 它作为字符串工作,因为字符串是指针 (char*),而 fscanf() 需要存储输入的位置的地址。跨度>

标签: c file scanf


【解决方案1】:

需要将int变量的地址传递给fscanf

fscanf(pFile, "%d", &number);

【讨论】:

  • 我觉得自己像个白痴……谢谢
  • @user1469988 你应该接受穆萨的回答。
【解决方案2】:

你需要一个指向数字的指针

fscanf(pFile, "%d", &number);

检查fscanf的返回值是个好主意

您可能还需要冲洗。

即在 printf 之后添加行

fflush(stdout);

如果您无法打开文件,您也需要初始化number 或执行return

所以总而言之,代码应该是这样的

FILE * pFile;
int number;
pFile = fopen ("myfile.txt","r");

if (NULL == pFile && 1 == fscanf(pFile, "%d", &number))
{
    printf("Number: %i", number);
    fflush(stdout);
    return 0;
}
else
{
    return -1;
}

【讨论】:

    【解决方案3】:

    你忘了给 fscanf 传递数字的地址而不是数字的值。所以替换

    fscanf(pFile, "%d", number); 
    

    fscanf(pFile, "%d", &number);
    

    必须将/的地址传递给number的指针,否则无法修改number的内容。

    【讨论】:

      【解决方案4】:

      永远不要忘记,对于输入(来自键盘/文件),您需要提及变量的地址。所以你必须在变量前加上&

      在你的情况下:

      fscanf(pFile, "%d", &number);
      

      另外你最好检查一下你是否到达了文件结尾:

      while(fscanf(pFile, "%d", &number) != EOF){
          //do the logic
      }
      

      查看这些手册了解更多信息:

      Linux Programmer's Manual

      C library function - fscanf()

      【讨论】:

      • != EOF 不是一个充分的检查。
      猜你喜欢
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多