Avatar billede mpkj Nybegynder
16. maj 2005 - 12:45 Der er 7 kommentarer

C: Hvordan gemmer jeg en string i en tmp fil?

Jeg har problemer med en del af mit program. Jeg har fået det til at udvælge en tilfældig kategori og printe denne, og vælge et random ord i kategorien og printe dette.

Jeg vil nu gerne gemme ordet (ALine) i en tmpfil (så jeg kan benytte ordet i andre dele af programmet). Er det den smarteste måde at gøre det på, her en min kode:

Det er nederst i koden det går galt med at gemme i den tmpfil..

#include "myheader.h"

int getcategory(void)
{
  system("cls");
  int Tal, i, ATal, n;
  char Line[1024], ALine[1024];
{
  FILE *f = fopen("category.txt", "r");
  if(!f)
  {
      fprintf(stderr, "Failed to open category.txt\n");
      return EXIT_FAILURE;
  }
  srand(time(NULL));
  Tal = 1 + rand()%3;
  for(i = 0; i < Tal; i++)
      fgets(Line, sizeof(Line), f); 
      fclose(f); 
}
  printf("\n\n\nThe category is:\n\n\n");
  printf("\n%s\n\n\n\n\n\n", Line);
  printf("Hit enter to pick a random word in the category displayed\n");
  system("pause");




if (Tal == 1)
{     
      FILE *animals = fopen("animals.txt", "r");
      if(!animals)
      {
            fprintf(stderr, "Failed to open animals.txt\n");
            return EXIT_FAILURE;
      }
            srand(time(NULL));
            ATal = 1 + rand()%6;
            for(i = 0; i < ATal; i++)
                  fgets(ALine, sizeof(ALine), animals);
                  printf("%s", ALine);
}

           
if (Tal == 2)
{
      FILE *food = fopen("food.txt", "r");
      if(!food)
      {
            fprintf(stderr, "Failed to open food.txt\n");
            return EXIT_FAILURE;
            }
            srand(time(NULL));
            ATal = 1 + rand()%6;
            for(i = 0; i < ATal; i++)
                  fgets(ALine, sizeof(ALine), food);
                  printf("%s", ALine);
      }


if (Tal == 3)
{
    FILE *places = fopen("places.txt", "r");
      if(!places)
      {
            fprintf(stderr, "Failed to open places.txt\n");
            return EXIT_FAILURE;
      }   
            srand(time(NULL));
            ATal = 1 + rand()%6;
            for(i = 0; i < ATal; i++)
                  fgets(ALine, sizeof(ALine), places);
                  printf("%s", ALine); //printer ALine
    }
      system("pause");
//JEG VIL GERNE GEMME ALine I tmp_ALine
FILE *tmp_ALine;
tmp_ALine = tmpfile();
putc(ALine, tmp_ALine);

fprintf(tmp_ALine, "%s");
system("pause");

n = strlen(ALine);
      if (isalpha(ALine[i]))
printf("\n\n\n\n\n");
for(i = 0; i <=n; ++i)
        printf("_ ", ALine[i]);
printf("\n\n\n\n");

system("pause");

      getchar();
  return 0;
}




VH

MPKJ
Avatar billede arne_v Ekspert
16. maj 2005 - 12:47 #1
du skriver til en fil ved at kalde fopen med "w" og bruge fputs
Avatar billede stefanfuglsang Juniormester
16. maj 2005 - 12:52 #2
Dit program er lidt uigennemskueligt, men mon ikke:
//JEG VIL GERNE GEMME ALine I tmp_ALine

FILE *tmp_ALine;
tmp_ALine = tmpfile();
fprintf(tmp_ALine, "%s", ALine);
fclose(tmp_Aline)

er det du skal sætte ind
Avatar billede arne_v Ekspert
16. maj 2005 - 12:55 #3
"w" skal nok iøvrigt være "a" for at appende fremfor at lave ny fil
Avatar billede arne_v Ekspert
16. maj 2005 - 12:56 #4
og ja - fprintf kan også sagtens bruges - alle veje fører til rom
Avatar billede stefanfuglsang Juniormester
16. maj 2005 - 12:56 #5
... dvs. nej, tmpfile() laver en temporær *binær* fil, du ønsker en tekstfil.

I øvrigt slettes en temporær fil, når fclose kaldes.
Du kan evt. (som Arne skriver) bruge noget i retning af

/* fopen example */
#include <stdio.h>
int main ()
{
  FILE * pFile;
  pFile = fopen ("myfile.txt","wt");
  if (pFile!=NULL)
  {
    fputs ("fopen example",pFile);
    fclose (pFile);
  }
  return 0;
}
Avatar billede mpkj Nybegynder
18. maj 2005 - 12:59 #6
I må undskylde at jeg glemte at svare på tråden, men stefan dit svar ramte plet :)
Avatar billede stefanfuglsang Juniormester
18. maj 2005 - 14:57 #7
Fint.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester