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?
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
27. april 2005 - 18:31
#1
Prøv og erstat: char *word; med: char word[100];
27. april 2005 - 18:31
#2
Og: printf("%s\n", &word); med: printf("%s\n", word);
27. april 2005 - 18:32
#3
Og: fscanf(ifp, "%s", &word) med: fscanf(ifp, "%s", word)
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; }
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?
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)
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
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";
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
28. april 2005 - 11:04
#10
jeg får kun de fire første stringe char *kategori_type[4][100]; kategori_type[0][] =
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?
28. april 2005 - 11:19
#12
jeg er lost hvilken kode bruger du ? hvilket output får du ? hvilket output forventede du ?
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...
28. april 2005 - 12:16
#14
har du C kode i din .txt fil ?
28. april 2005 - 15:45
#15
din externe fil skulle vel kun indeholde: stringet stringto stringtre stringfire
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.
28. april 2005 - 18:47
#17
.
28. april 2005 - 22:15
#18
Jeg takker mange gange for hjælpen..
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.
Kurser inden for grundlæggende programmering