我正在製作一個程序來使用結構和函數輸入書籍的細節。如何限制用戶只輸入文本而不輸入數字?
下面是一個使用結構我申報管理書細節:
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(變量)進行檢查。
C代碼無法限制用戶輸入的內容。代碼需要讀取所有輸入,然後根據需要處理該輸入。 – chux
「*檢查每個字符是否爲數字的條件*」=> [] isdigit()'](http://en.cppreference.com/w/c/string/byte/isdigit)是否足夠? – dhke
我正在考慮使用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);' 但是它沒有用,你能指出我的錯誤嗎? –