Also lese ich Daten aus einer Datei getrennt durch Kommas. Aus irgendeinem Grund durchläuft der Code nicht die gesamte Datei und druckt nur einen bestimmten Komponententyp aus.Einlesen von einer Datei mit Adresse anstelle von Werten
Auch für die NumOfItems und Preis, ich bekomme nur die Adresse ausgedruckt werden, anstatt die Werte!
Hier ist mein Code:
typedef struct inventory {
char *componentType;
char *stockCode;
int numOfItems;
int price;
} inventory;
int main(int argc, char** argv)
{
char str[255];
FILE *invf= fopen("inventory.txt", "r");
// creating an array of structs
struct inventory inv[384];
// counter for array position
int counter = 0;
while (fgets(str, 256, invf) != NULL){
char *componentType = strtok(str, " ,");
// the NULL means it will pick up where it left off
char *stockCode = strtok(NULL, " ,");
int *numOfItems = strtok(NULL, " ,");
int *price = strtok(NULL, " ,");
// adding to the struct
inv[counter].componentType = componentType;
inv[counter].stockCode = stockCode;
inv[counter].numOfItems = &numOfItems;
inv[counter].price = &price;
counter++;
}
int i = 0;
for(i =0; i <300; i++){
printf("%s %s %d %d \n", inv[i].componentType, inv[i].stockCode, inv[i].numOfItems, inv[i].price);
}
return EXIT_SUCCESS;
}
CSV Beispiel
lightbulb, RES_16M, 711, 1, 16M
lightbulb, RES_16Ms, 7112, 1, 16Mk
card, CAP_2700pf, 75, 26, 2700pf
card, CAP_2700pfs, 75, 262, 2700pff
Current, ASDba, 0, 800, "doesn't follow trend"
Current, TL741, 20, 12, "doesn't either"
Sie könnten 'strdup()' s der Zeiger 'strtok()' zurückgeben, anstatt diese Zeiger in Ihren Strukturen direkt zu speichern, da 'fgets()' den Inhalt überschreiben wird. – EOF
Sie müssen "atoi" oder etwas ähnliches, um ein int von einer Zeichenfolge zu erhalten. – crashmstr
Was versuchen Sie mit 'int * numOfItems = strtok (NULL,", ");'? Wenn Ihr Compiler Sie nicht dafür anschreien wird, bedeutet das, dass es nicht richtig konfiguriert ist. – Medinoc