如何限制用户只输入文字而不输入数字?

时间:2016-12-12 17:10:35

标签: c arrays string typedef

我正在制作一个使用结构和功能输入书籍细节的程序。

这是我声明使用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(变量)进行检查。

1 个答案:

答案 0 :(得分:3)

您可以使用isdigit()中的isalpha()ctype.h功能进行检查。您也可以使用此表http://www.asciitable.com/

直接比较用户输入的ASCII值