Я пишу программу, которая читает строку и записывает эту строку в другой файл, который не был создан.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char s[50];
FILE *fp;
fp = fopen("E:\\poem.txt","w");
if (fp = NULL)
{
printf("Cannot open file");
exit(1);
}
printf("Enter a string\n");
while(strlen(gets(s))>0)
{
fputs(s,fp);
fputs("\n",fp);
}
fclose(fp);
return 0;
}
Поскольку режим «w» создает новый файл, если файл еще не создан, моя программа создает этот файл, но не может записать его в файл.
Двойная косая черта в fp = fopen("E:\\poem.txt","w");
потому, что я думал, что \p не может быть управляющей последовательностью, но я хочу перейти в каталог E:\, поэтому я использовал двойную косую черту.
Однако я даже пробовал fp = fopen("poem.txt","w");
то же самое происходит, создает файл, но не записывает в него.
Также проверил этот вопрос, но не помогло C: не могу записать данные в файл
if (fp = NULL)
это плохо!!! Присваивает NULL
fp
и всегда ложно.
Это была опечатка, и я потратил все время впустую.
К вашему сведению, если вы посмотрите на справочную страницу для gets
, там написано «Никогда не используйте эту функцию». Вы должны использовать fgets
.
Кстати. Никогда не используйте gets()
! Он устарел и удален из языка по уважительным причинам в более новых версиях (ищите его, если вам нужна дополнительная информация)
Как вы упомянули в комментарии, используйте опечатку ==
вместо =
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char s[50];
FILE *fp;
fp = fopen("E:\\poem.txt", "w");
if (fp == NULL)
{
printf("Cannot open file");
exit(1);
}
printf("Enter a string\n");
while (strlen(gets(s)) > 0)
{
fputs(s, fp);
fputs("\n", fp);
}
fclose(fp);
return 0;
}
Пожалуйста, не могли бы вы отформатировать код лучше
Со страницы руководства gets():
gets() возвращает s в случае успеха и NULL в случае ошибки или конца файла. происходит, когда символы не были прочитаны.
Когда gets()
возвращает NULL (при ошибке), то strlen(NULL)
вызывает ошибку сегментации.
Таким образом, вы можете просто использовать while(gets(s)!=NULL)
вместо while(strlen(gets(s)) > 0)
Почему последний цикл когда-нибудь закончится? Если он не заканчивается, файл не будет закрыт.