ibilalkayy Ответов: 1

Как распечатать данные в файле?


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INCLUDE_LEN 50

int main(){
  FILE * fw = fopen("new.csv", "r");
  char* listing[] = {"Name", "Date of Birth", "Amount", "Account"};
  char data[4][INCLUDE_LEN], name[INCLUDE_LEN], amount[INCLUDE_LEN], option, dob[INCLUDE_LEN], account[INCLUDE_LEN];
  int i, done=0;

do
{
  for (i=0; i<4; i++){
    printf("Enter your %s: ", listing[i]);
    fgets(data[i], INCLUDE_LEN, stdin);
    if(strcmp(data[i], "\n") == 0){
      fgets(data[i], INCLUDE_LEN, stdin);
    }
    else{
      data[i][strlen(data[i]) -1] = '\0';
    }
  }

  fprintf(fw, "%s %s %s %s", data[0], data[1], data[2], data[3]);
  printf("Do you want to continue [y/n]: ");
  scanf("%s", &option);
} 
while(option == 'y');
  fclose(fw);
  return 0;
}


Что я уже пробовал:

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

1 Ответов

Рейтинг:
5

OriginalGriff

Этот код ничего не добавляет к файлу, потому что вы открываете его только для чтения:

FILE * fw = fopen("new.csv", "r");
(Это то, что означает часть "r") поэтому, когда вы пытаетесь записать в файл, запрос всегда будет неудачным.
Вы можете открыть его для чтения и записи (изменив "r" на "rw"), но ... вы хотели бы использовать fseek[^] чтобы абсолютно позиционировать себя в конце файла перед каждой записью, вы будете перезаписывать существующие данные (а учитывая, что это данные CSV, это почти наверняка сделает весь файл практически бесполезным).

Вы также всегда считываете только четыре значения из вашего файла, независимо от того, сколько он может содержать.