2016-12-12 19 views
2

私は構造と機能を使って本の詳細を入力するプログラムを作っています。ここでテキストだけを入力し、数字は入力しないようにユーザーを制限するにはどうすればよいですか?

は、書籍の詳細を管理するための構造体を使用して、私の宣言です:

入力へ
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); 

数字がある場合は、再度入力するようユーザーに通知します。私はループのための構造中に行うことを試みるが、各文字が数字かどうかをチェックする条件を考えることはできません。

編集:@yLaguardiaのおかげで、今私は答えを知っています。同じ質問をした人は、isdigit(変数)を使ってチェックしてください。

+2

Cコードではユーザーの入力を制限できません。代わりに、コードはすべての入力を読み込み、その入力を必要に応じて処理する必要があります。 – chux

+0

"*各文字が数字かどうかをチェックする条件*" => ['isdigit()'](http://en.cppreference.com/w/c/string/byte/isdigit)で十分ですか? – dhke

+0

ASCIIを使って、ユーザーが入力した文字が数字であるかどうかを比較することを考えています。コードを [変更] "本の著者:"); fpurge(stdin); fgets(list [i] .author、100、stdin); while(list [i] .author> = 48 && list [i] .author <= 57); ' しかし、うまくいかなかった、私の間違いを指摘できますか? –

答えて

3

ctype.hにあるisdigit()またはisalpha()の機能を使用して確認できます。このテーブルを使用して、ユーザーの入力のASC​​II値を直接比較することもできます。http://www.asciitable.com/

+0

isalpha()が正しいです。私は応答を修正しました。ありがとう – AndyW

関連する問題