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”)。同时打印实际文件名和当前工作目录。