Ich bin dabei, eine Lesebestandsfunktion zu entwickeln. Ich möchte, dass der Inhalt in einer inventory.txt-Datei gelesen wird, die ich in ein Projekt mit mehreren Dateien gestellt habe. Wenn ich es ausführe, bekomme ich den ersten Integralwert für die Produktnummer für alle Produkte, aber nach der Produktnummer bekomme ich beschädigte Daten, die nicht mit meiner Textdatei übereinstimmen. Sieht aus wie der Fehler jetzt in meinen switch-Anweisungen ist. Sieht irgendjemand etwas falsch, wie ich versuche, die Daten aus der Textdatei in meinen swith-Anweisungen zu ziehen? Zum Beispiel sieht meine Konsole Ausgabe wie folgt:Dateizeiger druckt falsche Daten aus, wenn ich das Programm C programmiere
1000 1.49 3.79 10 A Fish Food
/* Here's my structure, I have this stored in a header file. */
struct inventory_s
{
int productNumber;
float mfrPrice;
float retailPrice;
int numInStock;
char liveInv;
char productName[PRODUCTNAME_SZ];
};
/* Here's the text I'm trying to insert from the inventory.txt file (this is my input file*/
1000, 1.49, 3.79, 10, 0, Fish Food
2000, 0.29, 1.59, 100, 1, Angelfish
2001, 0.09, 0.79, 200, 1, Guppy
5000, 2.40, 5.95, 10, 0, Dog Collar Large
6000, 49.99, 129.99, 3, 1, Dalmation Puppy
/* Here's the function I've built so far */
int readInventory(void)
{
int count = 0; //counts record
int length = 0; //shows length of string after its read
int tokenNumber = 0; //shows which token its currently being worked on
char* token; //token returned by strtok function
struct inventory_s newInventory; //customer record
int sz = sizeof(struct inventory_s) * 2; //string size to read
char str[sz]; //where data is stored
FILE* inventoryFile = fopen("customer.txt", "r"); //opens and reads file
if (inventoryFile == NULL) //if file is empty
{
printf("Could not open data file\n");
return -1;
}
while (fgets(str, sz, inventoryFile) != NULL) //if file is not empty
{
tokenNumber = INVENTORY_FIELD_PRODUCTNUMBER;
length = strlen(str);
str[length - 1] = '\0';
token = strtok(str, ","); //adds space when there is a "," and breaks into individual words
while (token != NULL)
{
switch (tokenNumber)
{
case INVENTORY_FIELD_PRODUCTNUMBER:
newInventory.productNumber = atoi(token);
break;
case INVENTORY_FIELD_MFRPRICE:
newInventory.mfrPrice = atof(token);
break;
case INVENTORY_FIELD_RETAILPRICE:
newInventory.retailPrice = atof(token);
break;
case INVENTORY_FIELD_NUMINSTOCK:
newInventory.numInStock = atoi(token);
break;
case INVENTORY_FIELD_LIVEINV:
(newInventory.liveInv, token);
break;
case INVENTORY_FIELD_PRODUCTNAME:
strcpy(newInventory.productName, token);
break;
}
token = strtok(NULL, ",");
tokenNumber++; //starts the next inventory
}
count++;
printf("%i %.2f %.2f %i %c %s\n", newInventory.productNumber, newInventory.mfrPrice, newInventory.retailPrice, newInventory.numInStock, newInventory.liveInv, newInventory.productName); //prints out in console
}
fclose(inventoryFile);
return 0;
}
'strcpy (newInventory.liveInv, Token)' - 'liveInv' ist ein einfaches' char', kein Array von 'char', so können Sie 't 'strcpy()' hinein. Sie versuchen auch, die gesamte Zeile nach dem Lesen jedes Tokens zu "printf"(), anstatt nach dem Lesen aller Token in dieser Zeile. Du verpasst irgendwo in deinem Code eine schließende Klammer. Sie zeigen uns Ihre Eingabedatei nicht an. –
Ich arbeite daran. Danke, dass Sie mir geholfen haben. Ich komme jedes Mal weiter und weiter. Jetzt kann ich es ausdrucken, aber nur eine Zeile der Textdatei wird ausgedruckt. – RTriplett