В Windows и MinGW, возможно, потребуется открыть файл в двоичном режиме, добавляя «Ъ» в FOPEN режиме:
fp_1 = fopen("fred.out","wb");
Edit2: Как сказал Degustaf в комментариях, вы можете использовать char * strerror(int errnum)
, в том числе errno.h и string.h, чтобы знать, что была ошибка:
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main(void)
{
FILE *fp_1;
float mat[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i,j;
fp_1 = fopen("fred.out","w");
if(fp_1 == NULL) {
printf("\n%s",strerror(errno));
return 1;
}
for (j=0;j<3;j++)
{
for (i=0;i<3;i++)
fprintf(fp_1," %+10.2f\n",mat[j][i]);
fprintf(fp_1,"\n");
}
fclose(fp_1);
getch();
return 0;
}
Edit: Вы можете проверить Errno следующим образом, в том числе errno.h, и проверки переменной с именем «ERRNO». В следующем примере, есть некоторые ошибки нет в списке, потому что Еореп может установить ERRNO к тем же ошибки, чем таНос см человеко страницы FOPEN, открытого, и таНоса для получения более подробной информации:
#include <stdio.h>
#include <errno.h>
void func_errno() {
switch(errno) {
case EACCES: printf("\nEACCES"); break;
case EEXIST: printf("\nEEXIST"); break;
case EFAULT: printf("\nEFAULT"); break;
case EFBIG: printf("\nEFBIG"); break;
case EINTR: printf("\nEINTR"); break;
case EISDIR: printf("\nEISDIR"); break;
case ELOOP: printf("\nELOOP"); break;
case EMFILE: printf("\nEMFILE"); break;
case ENAMETOOLONG: printf("\nENAMETOOLONG"); break;
case ENFILE: printf("\nENFILE"); break;
case ENODEV: printf("\nENODEV"); break;
case ENOENT: printf("\nENOENT"); break;
case ENOMEM: printf("\nENOMEM"); break;
case ENOSPC: printf("\nENOSPC"); break;
case ENOTDIR: printf("\nENOTDIR"); break;
case ENXIO: printf("\nENXIO"); break;
case EOVERFLOW: printf("\nEOVERFLOW"); break;
case EPERM: printf("\nEPERM"); break;
case EROFS: printf("\nEROFS"); break;
case EWOULDBLOCK: printf("\nEWOULDBLOCK"); break;
default: printf("\nOther error."); break;
}
}
int main(void)
{
FILE *fp_1;
float mat[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i,j;
fp_1 = fopen("fred.out","w");
if(fp_1 == NULL) {
func_errno();
return 1;
}
for (j=0;j<3;j++)
{
for (i=0;i<3;i++)
fprintf(fp_1," %+10.2f\n",mat[j][i]);
fprintf(fp_1,"\n");
}
fclose(fp_1);
getch();
return 0;
}
Я отредактировал свой ответ, чтобы опубликовать пример того, как проверить errno. – Bertrand125