【问题标题】:C, Reading A Text FileC、读取文本文件
【发布时间】:2015-05-16 11:37:16
【问题描述】:

如果这是一个愚蠢的问题,我很抱歉,但我尝试了许多不同的来源,但我仍然没有得到我想要的。我正在开发一个从文本文件中读取的程序,在下面的代码中,我试图读取第一行,它会给我在它下面创建的电阻颜色代码的数量。我正在尝试读取数字(n)并简单地打印它以查看它的读数,但我什么也没得到。这似乎很简单,但我似乎无法理解。

`FILE *fpinpt;
FILE *fpoutpt;
FILE *fpnom;
int n, *ptr;
double a, b, c, d, e, f, g, h, i, j, k, l;
fpinpt= fopen("F:\EGR 107\EE\HW 4\resistorInput.txt","r");
fpoutpt= fopen("F:\EGR 107\EE\HW 4\resistorOutput.txt","w");
fpnom= fopen("F:\EGR 107\EE\HW 4\resistorNominal.txt","w");
fscanf(fpinpt,"%d\n",n);
printf("%d",n);
ptr=(int*)calloc(n, sizeof(int));
if (fpinpt==NULL)
{
    printf("Error reading resistor file\n");
    fclose(fpinpt);
}
if (ptr==NULL) printf("Error, memory not allocated\n");

`

【问题讨论】:

  • 在printf 语句中添加换行符 - printf("%d\n", n);。标准输出通常是行缓冲,这意味着它不会向控制台写入任何内容,除非缓冲区已满、发送换行符或在输出流上调用fflush。
  • 在调用 fopen() 之后立即检查是否成功调用 fopen被关闭并将分配的内存传递给free。请注意,如果 fopen 失败,则该文件未打开,因此不需要关闭。如果 calloc 失败,则不会分配内存,因此不需要调用 free。
  • @JohnBode 谢谢,但它并没有改变问题的结果。

标签: c file-io scanf


【解决方案1】:

问题的主要原因是您从不检查错误。对于每个fopen(),必须有一个

if (fopenedFile == NULL)
    ohNoMust_ICannotUse_fopenedFile();

现在为什么你的fopen() 失败了,因为你没有转义'\' 字符,所以每个文件名都应该像这样修复它

"F:\\EGR 107\\EE\\HW 4\\resistorInput.txt"

然后,文件将被打开,但 fscanf() 将无法工作,因为其他答案已经解决了(“当我在编辑我的时”)。

注意:

请阅读两个答案,重复@SouravGhosh 已经说过的话是没有意义的。

【讨论】:

  • 我修复了 '\' 问题,愚蠢的错误。仍然没有得到值,将进入另一个错误检查。
  • 等等,我已经有了` `if (fpinpt==NULL) { printf("读取电阻文件时出错\n"); fclose(fpinpt); }`` fpinpt 假定打开的文件,所以如果它什么也没得到,应该有一个错误。
  • @CurtisNegele 所以你没有发布整个代码?为什么?这会让人们给出错误的答案。
  • 它在发布的代码中。从底部开始的第二个 if 语句。
  • 是的,但你也应该检查"w"fopen()s 你永远不应该假设事情正常,但相反,我敢打赌他们因为错误的文件名而失败了。
【解决方案2】:

在您的代码中

fscanf(fpinpt,"%d\n",n);

应该是

fscanf(fpinpt,"%d",&n);

此外,请始终检查fscanf()、fopen() 的返回值,以确保正确输入/操作。

也就是说,你 don't need to cast 的返回值是 malloc() 和家人。

【讨论】:

  • 我之前有过,我尝试引用的最新示例就是这样做的,但无论哪种方式都不起作用。 calloc() 只是为未来做打算,你是说让它返回 n 吗?
  • @CurtisNegele 看看我的回答,你的代码一团糟,你需要确保文件打开了否则一切都会出错。
  • @CurtisNegele 你确定所有fopen()s 都成功了吗?
  • @SouravGhosh 你总是这样做,这就是为什么我喜欢你的回答。
  • @CurtisNegele if (fpinpt==NULL) 检查应该在使用fpinpt之前。
猜你喜欢
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 2017-05-02
  • 1970-01-01
  • 2011-06-29
相关资源
最近更新 更多