06. september 2007 - 14:50
Der er
10 kommentarer og 1 løsning
Cast without pointer
Har en tekstfil efter følgende format... id (heltal) code (tekst) name (tekst) amout (decimaltal) Jeg forsøger at indlæse filen til et array... men får et par fejlmeddelser... Er der en der kan forklarer hvad der går galt... Koden... typedef struct { int id; float amount; char name[45]; char code[3]; }Rate; int main(void) { Rate rate[10]; int index = 0; FILE *fp; fp = fopen("c:\\valuta.txt","r"); while(!feof(fp)) { fgets(rate[index].id, 256, fp); //256 er "max number of bytes to be read." fgets(rate[index].name, 256, fp); fgets(rate[index].code, 256, fp); fgets(rate[index].amount, 256, fp); index++; } fclose(fp); } på forhånd tak.. ares
Annonceindlæg fra Infor
06. september 2007 - 15:01
#1
Hvis det er en tekst fil boer du bruge fscanf eller en enkelt fgets og saa strncpy og atoi de enkelte felter.
06. september 2007 - 16:12
#2
hmmm... ok... det prøver jeg lige at rode lidt med... ;) Skal jeg bruge atoi på alle felter eller kun på dem der holder talværdier ? Ares
06. september 2007 - 16:33
#3
atoi for integer atof for fp ikke for strings
06. september 2007 - 17:50
#4
Ok... hvorfor får jeg ingen fejl hvis jeg ændre alt i typedefintionen til char... Ares
06. september 2007 - 20:59
#5
Hvis det er C++ ville det være lettere med: #include <fstream> #include <iostream> struct Rate { int id; float amount; char name[45]; char code[3]; }; std::istream& operator >> (std::istream& is, Rate& rate) { is >> rate.id; is >> rate.code; is >> rate.name; is >> rate.amount; return is; } std::ostream& operator << (std::ostream& os, Rate& rate) { os << rate.id << std::endl; os << rate.amount << std::endl; os << rate.name << std::endl; os << rate.code << std::endl; return os; } int main(void) { Rate rate[10]; std::ifstream In("c:\\valuta.txt"); if(!In) std::cout << "Did not open" << std::endl; int idx; for(idx = 0; idx < 10 && In >> rate[idx]; idx++) {} for(int i = 0; i < idx; i++) std::cout << rate[i]; }
07. september 2007 - 04:34
#6
Jeg tror at den giver problemer med mellemrum i navn.
07. september 2007 - 08:09
#7
Kan jeg lokke en af jer til at komme med et eksempel på hvordan I ville gøre det, i C. Ares
07. september 2007 - 20:40
#8
I C: #include <stdio.h> #include <stdlib.h> #include <string.h> struct Rate { int id; float amount; char name[45]; char code[3]; }; int main(void) { Rate rate[10]; int idx, nof; char Buffer[100], *p; FILE *f = fopen("c:\\valuta.txt", "rt"); if(!f) { printf("Failed to open the file\n"); return 0; } for(idx = 0; idx < 10 && fgets(Buffer, sizeof(Buffer), f); idx++) { rate[idx].id = strtol(Buffer, 0, 10); fgets(Buffer, sizeof(Buffer), f); if((p = strchr(Buffer, '\n')) != 0) *p = 0; strcpy(rate[idx].code, Buffer); fgets(Buffer, sizeof(Buffer), f); if((p = strchr(Buffer, '\n')) != 0) *p = 0; strcpy(rate[idx].name, Buffer); fgets(Buffer, sizeof(Buffer), f); rate[idx].amount = strtod(Buffer, 0); } fclose(f); nof = idx; for(idx = 0; idx < nof; idx ++) { printf("%d\n%f\n%s\n%s\n\n", rate[idx].id, rate[idx].amount, rate[idx].name, rate[idx].code); } }
13. september 2007 - 20:20
#9
Smid lige nogle svar...
13. september 2007 - 20:29
#10
Jeg samler ikke på point.
14. september 2007 - 01:21
#11
svar
Kurser inden for grundlæggende programmering