每当我运行程序时,屏幕上都会显示“无法打开文件名”。我在讲义中遵循了指导原则和方法论,但实际上不知道为什么它无法打开。任何帮助将不胜感激。
#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);
}
最佳答案
大多数库函数都使用称为errno
的外部变量,当这些函数之一发生故障时会设置该外部变量并指出故障原因。
您可以通过调用perror
(将错误消息打印到stderr
)获得错误消息的文本描述,或者可以调用strerror(errno)
返回错误消息的char *
,随后您可以随后将其指向错误消息。放入您自己的错误消息。
如果对fopen
的调用失败,请将错误消息更改为以下内容:
fprintf(stderr, "Couldn't open %s: %s \n", filename, strerror(errno));
您可以对其他错误消息进行类似的更改。完成此操作后,您将知道功能为何失败并采取适当的措施。