ok, im having a problem where im trying to read data in from a file and im getting extra data I don't want. Can't quite even figure out where this data is from sometimes.
example of file:
Code:
abcdefghijklmnopqrst 9999.99 breakfast
drink3 good wtf 1.29 beverage
food good wtfee 1.95 appetizer
steak 19.65 dinner
snipit of code im using:
Code:
#define ROWS 80 /* default rows */
#define NAMEMAX 21 /* max size of name array */
#define PRICEMAX 9 /* max size of price temp array */
#define TYPEMAX 11 /* max size of type array */
struct menu *getMenu(void) {
char temp[ROWS];
FILE *file; /* file pointer */
char name[NAMEMAX]; /* name of menu item */
float price; /* price of menu item */
char type[TYPEMAX]; /* type of menu item */
struct menu *theMenu; /* head of menu item list */
struct menu *newMenuItem; /* new menu item */
file = fopen("menu.db", "r");
if (file == NULL) {
printf("\nThe file could not be opened.");
theMenu = NULL;
}
else {
if (fscanf(file, "%20c %f %s\n", name, &price, type) != EOF) {
printf("\n|%s| |%f| |%s|", name, price, type);
theMenu = makeMenuItem(name, price, type);
while (fscanf(file, "%20c %f %s\n", name, &price, type) != EOF) {
printf("\n|%s| |%f| |%s|", name, price, type);
newMenuItem = makeMenuItem(name, price, type);
theMenu = insertMenuItem(theMenu, newMenuItem);
}
}
}
fclose(file);
return (theMenu);
}
if I set fscanf(file, "%20c %f %s\n", name, &price, type) I get some extra character at the end of name I dont want. If I set to 21 I get an extra space. if I set to 19 I lose a char and things scew off where ill get odd data in the other variables.
fscanf(file, "%19c %f %s\n", name, &price, type)
Code:
|abcdefghijklmnopqrs| |0.000000| |░¡á¢Õ|
|t 9999.99 breakfast| |0.000000| |░¡á¢Õ|
|drink3 good wtf | |1.290000| |beverage|
|food good wtfee | |1.950000| |appetizer|
|steak | |19.650000| |dinner|
fscanf(file, "%20c %f %s\n", name, &price, type)
Code:
|abcdefghijklmnopqrstn| |9999.990234| |breakfast|
|drink3 good wtf n| |1.290000| |beverage|
|food good wtfee n| |1.950000| |appetizer|
|steak n| |19.650000| |dinner|
fscanf(file, "%21c %f %s\n", name, &price, type)
Code:
|abcdefghijklmnopqrst | |9999.990234| |breakfast|
|drink3 good wtf | |1.290000| |beverage|
|food good wtfee | |1.950000| |appetizer|
|steak | |19.650000| |dinner|
While the extra space in this one doesn't seem so bad, I can't really have it. Am I doing something wrong, or will I have to force a '\0' in there?