我正在制作一个使用结构和功能输入书籍细节的程序。
这是我声明使用struct来管理书籍细节:
typedef struct {
char name[100];
char author[100];
char publisher[100];
char description[100];
char ISBN[15];
int quantity;
} book;
输入的功能:
void addBook(int* n, book list[1000]) {
do {
printf("Enter number of book you want to add: ");
fpurge(stdin);
scanf("%d%c", n, &enter);
if (n == 0) break;
if (*n < 0 || *n > 1000 || enter != '\n') printf("Invalid input, please try again.\n");
} while (*n < 0 || *n > 1000 || enter != '\n');
for (int i = 0; i < *n; i++) {
printf("-----------------------------------------------------\n");
printf("Please enter all the information of book number %d\n", i + 1);
printf("Book title: ");
fpurge(stdin);
fgets(list[i].name, 100, stdin);
printf("Book author: ");
fpurge(stdin);
fgets(list[i].author, 100, stdin);
printf("Publisher: ");
fpurge(stdin);
fgets(list[i].publisher, 100, stdin);
printf("ISBN: ");
fpurge(stdin);
fgets(list[i].ISBN, 15, stdin);
printf("Quantity: ");
fpurge(stdin);
scanf("%d", &list[i].quantity);
printf("Description (optional): ");
fpurge(stdin);
fgets(list[i].description, 100, stdin);
}
}
我想知道是否有任何方法限制用户只输入以下索引的文本:
printf("Book author: ");
fpurge(stdin);
fgets(list[i].author, 100, stdin);
如果有任何数字,请通知用户再次输入。我尝试使用do while while循环但不能考虑检查每个字符是否为数字的条件。
编辑:感谢@yLaguardia,现在我知道了答案。对于每个有相同问题的人,请使用isdigit(变量)进行检查。答案 0 :(得分:3)
您可以使用isdigit()
中的isalpha()
或ctype.h
功能进行检查。您也可以使用此表http://www.asciitable.com/