Файл не сохраняется должным образом в C - PullRequest
0 голосов
/ 08 мая 2018

У меня проблема в том, что данные не сохраняются должным образом, То, что я хочу, это чтобы информация оставалась неизменной, когда вы запускаете код. Вот код, с которым у меня проблемы:

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
typedef struct{
int select;
char NoteNames[20];
char NoteTexts[200];
}Notes;
char Input[20];
bool RUN = true;
#define ARRAYLEN 2
Notes a[ARRAYLEN];
int main(void) {
    int i;
  FILE *fp;
  while(RUN == true){
  printf("\nWould you like to view notes or take notes?\n<view/take/leave>\n");
  scanf("%s",Input);
  if (strncmp(Input, "view",1)==0){
    fp = fopen ("Notes.dat", "a+");
    printf("Here are the notes\n\n");
    for(i=0; i<(ARRAYLEN-1); i++){
        fread(&a[i], sizeof(a), 1, fp );
        printf("%s : %s \n",a[i].NoteNames,a[i].NoteTexts);
    }
    fclose(fp);
  }
  if (strncmp(Input, "take",1)==0){
    fp = fopen ("Notes.dat", "a");
    printf("\nNote name : ");
    scanf("%s",a[i].NoteNames);
    printf("\nNote text : ");
    scanf("%s",a[i].NoteTexts);
    fclose(fp);
  }
  if (strncmp(Input, "leave",1)==0){
    RUN = false;
  }
  }
  return 0;
}

Я пробовал что-то вроде изменения типа fopen (т. Е. R / r + a / a +), но я не могу выяснить, что не так с кодом. Извините, если я делаю это совершенно неправильно, это в основном несоответствие кода, который я могу найти в Интернете xD.

Edit: Вывод был все нормально и то, что я ожидал, но проблема, как я уже сказал, в том, что данные не сохранялись.

---HERE IS WHAT IT OUTPUTS---
Would you like to view notes or take notes?
<view/take/leave>
 take
Enter the notes name:
 lol
Enter the notes text:
 kek
Would you like to view notes or take notes?
<view/take/leave>
 view
lol : kek
Would you like to view notes or take notes?
<view/take/leave>
leave
>
---NEXT RUN---
Would you like to view notes or take notes?
<view/take/leave>
view
 : 
Would you like to view notes or take notes?
<view/take/leave>
---END OF OUTPUT---

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Используйте fprintf для записи вашего содержимого в ваш файл.

0 голосов
/ 08 мая 2018

Вы можете использовать приведенный ниже код для записи файла

FILE *fptr;
fptr = fopen("program.txt", "w");
if(fptr == NULL)
{ 
printf("Error!");
exit(1);
} 
printf("Enter a sentence:\n");
gets(sentence);
fprintf(fptr,"%s", sentence);
fclose(fptr);

И Прочитать файл ниже

char c[1000];
FILE *fptr;
if ((fptr = fopen("program.txt", "r")) == NULL) 
{
printf("Error! opening file");
//Program exits if file pointer returns NULL. 
exit(1);
} 
// reads text until newline fscanf(fptr,"%[^\n]", c); 
printf("Data from the file:\n%s", c); 
fclose(fptr);
0 голосов
/ 08 мая 2018

Внимательно прочитайте ваш код и постройте его построчно:

  • В первом if вы открываете, читаете и закрываете свой файл.
  • Во втором if вы просто открываете, а затем закрываете свой файл.
    • Нет записи в нее.
...