#c #file #codeblocks #fopen
Вопрос:
Привет, я создал и запустил программу на своей машине, но когда я пытаюсь запустить код на другой машине, он не запускается.
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *f;
char buff[50];
f = fopen("textfile.txt","r");
if(f==NULL)
exit(1);
printf("Contents before appendiing: ");
while(fgets(buff,50,f)!=NULL)
fputs(buff,stdout);
fclose(f);
f = fopen("textfile.txt","a");
if(f==NULL)
{
printf("Unable to open file");
exit(1);
}
printf("nEnter contents to append (type 'exit'to stop): ");
do{
fgets(buff,50,stdin);
if(strcmp(buff,"exitn")==0)
break;
fputs(buff,f);
}while(f!=NULL);
fclose(f);
f = fopen("textfile.txt","r");
if(f==NULL)
{
printf("Unable to open file");
exit(1);
}
printf("nContents after appendiing: ");
while(fgets(buff,50,f)!=NULL)
fputs(buff,stdout);
fclose(f);
return 0;
}
Программа выдает этот вывод на моей исходной машине, где он работает так, как и должен быть:
Contents before appendiing: hello world
Enter contents to append (type 'exit'to stop): hello
exit
Contents after appendiing: hello world
hello
Process returned 0 (0x0) execution time : 10.006 s
Press any key to continue.
В то время как он дает это в моей другой машине:
Contents before appendiing: hello world
Unable to open file
Process returned 1 (0x1) execution time : 4.452 s
Press any key to continue.
Я понимаю, что это происходит, потому что значение f стало НУЛЕВЫМ, но почему это происходит на одной машине, а не на другой.
Я запускаю Windows 10 и использую code::blocks IDE на обеих машинах.
Комментарии:
1. Выведите сообщение об ошибке, представленное,
errno
чтобы узнать причинуfopen()
сбоя.2. Поскольку вы могли прочитать файл на обеих машинах, у вас, вероятно, нет разрешения на запись в файл на второй машине.
3. В стороне: управление циклом
} while(f!=NULL);
неверно, вы должны управлять им так:while(fgets(buff,50,stdin) != NULL) { ... }
4. @Флюгер Я довольно новичок в программировании, поэтому было бы полезно, если бы вы могли сказать мне, почему «while(f!=NULL);» неверно
5. Потому что это продолжает проверять, был ли выходной файл успешно открыт, что вы уже сделали. Значение
f
не изменится во время записи вывода. Цикл должен проверять конец входного файла.