Avatar billede koch Nybegynder
27. april 2005 - 18:29 Der er 19 kommentarer og
1 løsning

Der læses kun ét ord fra min fil

Jeg har følgende som gerne skulle læse de ord der står i min test.txt fil så længe der er ord.

#include <stdio.h>
#include <stdlib.h>

void getwords(){
  FILE *ifp;
    ifp = fopen("test.txt", "r");
    char *word; //*word er en pointer til char variabel
   
    while (fscanf(ifp, "%s", &word) == 1){
      printf("%s\n", &word);
      }
 

    fclose(ifp);   
    }


int main(int argc, char *argv[])
{
    getwords();
   
  system("PAUSE");   
  return 0;
}

Jeg får kun det første ord skrevet og så kommer der en windows fejl med at programmet er lukket. Hvad har jeg gjort galt ovenfor?
Avatar billede arne_v Ekspert
27. april 2005 - 18:31 #1
Prøv og erstat:

char *word;

med:

char word[100];
Avatar billede arne_v Ekspert
27. april 2005 - 18:31 #2
Og:

printf("%s\n", &word);

med:

printf("%s\n", word);
Avatar billede arne_v Ekspert
27. april 2005 - 18:32 #3
Og:

fscanf(ifp, "%s", &word)

med:

fscanf(ifp, "%s", word)
Avatar billede arne_v Ekspert
27. april 2005 - 18:32 #4
#include <stdio.h>
#include <stdlib.h>

void getwords(){
  FILE *ifp;
    ifp = fopen("test.txt", "r");
    char word[100];
 
    while (fscanf(ifp, "%s", word) == 1){
      printf("%s\n", word);
      }


    fclose(ifp); 
    }


int main(int argc, char *argv[])
{
    getwords();
 
  system("PAUSE"); 
  return 0;
}
Avatar billede koch Nybegynder
27. april 2005 - 18:35 #5
Det virker... Selvfølgelig! Hvis jeg nu vil have styr på de ord der står i filen, laver jeg så et array i filen som

char kategori_type[];
kategori_type[1] = string_et;
kategori_type[2] = string_to;
kategori_type[3] = string_tre;
kategori_type[4] = string_fire;

og så selvfælgelig lige tilpasser printf så den udskriver de forskellige elementer?
Avatar billede arne_v Ekspert
27. april 2005 - 18:37 #6
Hvad med et 2 dim array.

char kategori_type[10][100];

(så har du plads til 10 ord med maksimalt 99 tegn i hver)
Avatar billede koch Nybegynder
28. april 2005 - 10:40 #7
Nu har jeg følgende i min eksterne fil

char *kategori_type[3][100];
kategori_type[0][] = "stringet";
kategori_type[1][] = "stringto";
kategori_type[2][] = "stringtre";
kategori_type[3][] = "stringfire";


og jeg vil gerne have fat i disse værdier, hvert element. Jeg havde tænkt noget i stil med

    for (i = 0; i <= 3; i++){
    fscanf(ifp, "%s", &kategori_type[i][hvad skal der stå her]);
    printf("%s\n", kategori_type);

Jeg ved godt at jeg er gået tilbage til pointer, men det virker hvis jeg fjerner [][] i fscanf, men så skriver den de første strenge og ikke elementerne
Avatar billede arne_v Ekspert
28. april 2005 - 10:59 #8
char *kategori_type[3][100];
kategori_type[0][] = "stringet";
kategori_type[1][] = "stringto";
kategori_type[2][] = "stringtre";
kategori_type[3][] = "stringfire";

må skulle være

char *kategori_type[4][100];
kategori_type[0][] = "stringet";
kategori_type[1][] = "stringto";
kategori_type[2][] = "stringtre";
kategori_type[3][] = "stringfire";
Avatar billede arne_v Ekspert
28. april 2005 - 11:00 #9
for (i = 0; i <= 3; i++){
    fscanf(ifp, "%s", kategori_type[i]);
    printf("%s\n", kategori_type[i]);
}

bør virke
Avatar billede koch Nybegynder
28. april 2005 - 11:04 #10
jeg får kun de fire første stringe
char
*kategori_type[4][100];
kategori_type[0][]
=
Avatar billede koch Nybegynder
28. april 2005 - 11:18 #11
Kan C godt forstå at det er et array der er i en ekstern fil eller forstår den ikke kun at det er en streng?
Avatar billede arne_v Ekspert
28. april 2005 - 11:19 #12
jeg er lost

hvilken kode bruger du ?

hvilket output får du ?

hvilket output forventede du ?
Avatar billede koch Nybegynder
28. april 2005 - 11:22 #13
Min C kode ser således ud:

#include <stdio.h>
#include <stdlib.h>

void get_kategori(){
    FILE *ifp;
    ifp = fopen("testarray.txt", "r");
   
    //pointer til char
    char *kategori_type[3][100];
    int i;
   
    for (i = 0; i <= 3; i++){
    fscanf(ifp, "%s", &kategori_type[i]);
    printf("%s\n", kategori_type[i]);
    }

     
       

    fclose(ifp);   
    }

int main(int argc, char *argv[])
{
    get_kategori();
   
  system("PAUSE");   
  return 0;
}



og i min eksterne .txt fil

char *kategori_type[4][100];
kategori_type[0][] = "stringet";
kategori_type[1][] = "stringto";
kategori_type[2][] = "stringtre";
kategori_type[3][] = "stringfire";


Jeg får de fire første strenge, men vil gerne have de fire første elementer...
Avatar billede arne_v Ekspert
28. april 2005 - 12:16 #14
har du C kode i din .txt fil ?
Avatar billede segmose Nybegynder
28. april 2005 - 15:45 #15
din externe fil skulle vel kun indeholde:
stringet
stringto
stringtre
stringfire
Avatar billede koch Nybegynder
28. april 2005 - 18:26 #16
Til arne v: Jep!
Til Segmose: Jep, det var også det jeg tænkte!

Jeg laver det lige på en anden måde.  I smider bare et svar.
Avatar billede arne_v Ekspert
28. april 2005 - 18:47 #17
.
Avatar billede koch Nybegynder
28. april 2005 - 22:15 #18
Jeg takker mange gange for hjælpen..
Avatar billede arne_v Ekspert
28. april 2005 - 22:26 #19
segmose> du får lige halvdelen her http://www.eksperten.dk/spm/613923
Avatar billede koch Nybegynder
28. april 2005 - 23:14 #20
arne v: Jeg tænkte at du havde brugt mest tid på det egentlige 'start'-spørgsmål ;)

Men det er naturligvis tak for hjælpen til jer begge.
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



Seneste spørgsmål Seneste aktivitet
39 min siden Excel hjælp Af rudbech i Excel
I går 17:10 Joomla artikler Af rmadsen80 i CMS-systemer
I går 16:54 Printervalg til kontor Af tumben i Printere
I går 15:08 Http client med X509Certificate2 Af joki i C#
I går 13:02 Hjemmenetværk Af Andfer i LAN/WAN