C programmering: Inputvalidering
Hej!
Jag håller på att lära mig C programmering och har fastnat lite när det kommer till input validering. Programmet ska byggas med structs och fråga användaren efter 5 stycken varor som ska skrivas in och sedan ska programmet skriva ut en "Inköpslista". På exemelvis "Namn på varan" ska man enbart kunna skriva in bokstäver, inte siffror. Detta har jag försökt lösa med isalpha() som finns i ctype.h.
Problemet jag har är att det inte går att skriva isalpha(Items[i].itemName) i if-satsen. Jag försökte istället att kopiera Item[].itemName till en ny variabel via strcpy() men den funktionen verkar ta bort första bokstaven. Samt att när listan sedan skrivs ut så syns vara nummer 5 på första platsen men utan första bokstaven..
Är det någon som vet hur jag ska lösa detta? Finns det något bättre sätt att göra detta på?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
struct shoppingList {
char itemName[10];
int quantity;
char unit[10];
};
int main() {
struct shoppingList Item[5];
int i, j, k = 1;
char temp;
char unit[200];
int num;
for(i=0; i < 5; i++) {
/**< Detta är det jag behöver hjälp med. */
do {
printf("\nNamn p\x86 vara: ");
fflush(stdin);
scanf("%s", &Item[i].itemName);
strcpy(&temp, Item[i].itemName); /**< Verkar tappa bort första bokstaven.. */
if(isalpha(temp) != 0) {
break;
} else{
printf("\t\n Invalid input, try again!\n\n");
}
} while(k = 1);
do {
printf("Antal: ");
if( scanf("%i", &num) == 1) {
Item[i].quantity = num;
break;
} else
printf("\t\n Invalid input, try again!\n\n");
} while(k = 1);
printf("Enhet: ");
scanf("%s", &Item[i].unit);
}
printf("\nInk\x94pslistan: \n");
for (j = 0; j < 5 ; j++) {
printf("\n %6s \t %1i \t %2s\n", Item[j].itemName, Item[j].quantity, Item[j].unit);
}
return 0;
}