为什么不打开我的文件,我该如何解决?

时间:2017-12-04 12:20:01

标签: c file-handling readonly

每当我运行程序时,屏幕上都会打印“无法打开文件 filename ”。我在讲义中遵循了指导方针和方法,但实际上无法弄清楚为什么它不会打开。任何形式的帮助将不胜感激。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

#define READONLY "r"

int main (void)
{
  FILE *ipfile;
  char filename[FILENAME_MAX+1];
  int *unsorted_details;
  int elements;

  printf("Enter the name of the input file:\n");
  scanf("%s", filename);

  if((ipfile=fopen(filename, READONLY)) == NULL){
    fprintf(stderr, "Couldn't open %s. \n", filename);
    exit(EXIT_FAILURE);
  } 
  if (fscanf(ipfile, "%d", &elements) != 1){
    fprintf(stderr, "Couldn't read object details from %s\n", 
filename);
    exit(EXIT_FAILURE);
  }
  if ((unsorted_details=(int *)malloc(elements * sizeof(int))) == NULL){
    fprintf(stderr, "Failed to allocate memory.\n");
    exit (EXIT_FAILURE);
  }
  /* Reading elements from file into unsorted array*/
    int i;
  for (i=0; i<elements; i++){
    if(!fscanf(ipfile, "%d", &unsorted_details[i])){
        fprintf(stderr, "Error reading element %d of the list\n", i+1);
        exit (EXIT_FAILURE);
    }

   }
  fclose(ipfile);
  free(unsorted_details);
  return (EXIT_SUCCESS);
}

1 个答案:

答案 0 :(得分:1)

大多数库函数都使用一个名为errno的外部变量,该变量在其中一个函数失败时设置,并指出失败的原因。

您可以通过调用perror来获取错误消息的文本描述,该消息会将错误消息打印到stderr,或者您可以调用strerror(errno)来返回char * }指向您随后可以在自己的错误消息中输入的错误消息。

如果调用fopen失败,请将错误消息更改为以下内容:

fprintf(stderr, "Couldn't open %s: %s \n", filename, strerror(errno));

您可以对其他错误消息进行类似的更改。完成此操作后,您就会知道函数失败的原因并采取适当的措施。