Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我的文件无法打开,我如何修复它?_C_File Handling_Readonly - Fatal编程技术网

C 为什么我的文件无法打开,我如何修复它?

C 为什么我的文件无法打开,我如何修复它?,c,file-handling,readonly,C,File Handling,Readonly,每当我运行程序时,屏幕上都会显示“无法打开文件名”。我在课堂讲稿中遵循了指导原则和方法,但真的不明白为什么它不会打开。任何形式的帮助都将不胜感激 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #define READONLY "r" int main (void) { FILE *ipfile; char filename[FIL

每当我运行程序时,屏幕上都会显示“无法打开文件名”。我在课堂讲稿中遵循了指导原则和方法,但真的不明白为什么它不会打开。任何形式的帮助都将不胜感激

#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);
}
#包括
#包括
#包括
#包括
#定义只读“r”
内部主(空)
{
文件*ipfile;
字符文件名[filename_MAX+1];
int*未排序的_详细信息;
int元素;
printf(“输入输入文件的名称:\n”);
scanf(“%s”,文件名);
if((ipfile=fopen(文件名,只读))==NULL){
fprintf(stderr,“无法打开%s。\n”,文件名);
退出(退出失败);
} 
if(fscanf(ipfile,“%d”&元素)!=1){
fprintf(stderr,“无法从%s读取对象详细信息”\n,
文件名);
退出(退出失败);
}
if((未排序的_详细信息=(int*)malloc(元素*sizeof(int)))==NULL){
fprintf(stderr,“分配内存失败。\n”);
退出(退出失败);
}
/*将文件中的元素读入未排序的数组*/
int i;

对于(i=0;i大多数库函数使用名为
errno
的外部变量,该变量在其中一个函数出现故障时设置,并指示故障原因

您可以通过调用
perror
(将错误消息打印到
stderr
)来获取错误消息的文本描述,也可以调用
strerror(errno)
(返回一个
char*
)来指向错误消息,您随后可以将其放入自己的错误消息中

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

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

您可以对其他错误消息进行类似的更改。执行此操作后,您将知道函数失败的原因并采取相应的操作。

该文件可能不在当前目录中。抱歉,我不知道您所说的文件目录是什么意思,我如何修改此错误消息?请将该文件放在包含exe文件的同一目录中,并给出输入时也要打印文件的扩展名。请尝试一次。尝试输入完整的文件路径(绝对路径)。同时尝试打印
getcwd()
您可能不在您认为的目录中。您应该打印实际错误。阅读fopen文档(例如google的“man fopen”)。同时打印实际文件名和当前工作目录。