2016-12-12 63 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); 

如果有任何數字,請通知用戶再次輸入。我嘗試在循環的結構中使用do,但不能想到檢查每個字符是否爲數字的條件。

編輯:感謝@yLaguardia,現在我知道答案。對於每個有相同問題的人,請使用isdigit(變量)進行檢查。

+2

C代碼無法限制用戶輸入的內容。代碼需要讀取所有輸入,然後根據需要處理該輸入。 – chux

+0

「*檢查每個字符是否爲數字的條件*」=> [] isdigit()'](http://en.cppreference.com/w/c/string/byte/isdigit)是否足夠? – dhke

+0

我正在考慮使用ASCII來比較,如果字符是用戶鍵入後的數字,我將我的代碼更改爲 [link](http://example.com)_italic_ ** bold **'do {0} {0} 「書籍作者:」); fpurge(stdin); fgets(list [i] .author,100,stdin); (list [i] .author> = 48 && list [i] .author <= 57);' 但是它沒有用,你能指出我的錯誤嗎? –

回答

3

您可以使用ctype.h中的isdigit()isalpha()函數進行檢查。您也可以直接使用此表直接比較用戶輸入的ASCII值。使用此表http://www.asciitable.com/

+0

isalpha()是正確的。我修復了這個迴應。謝謝 – AndyW