구조체 및 함수를 사용하여 책 세부 정보를 입력하는 프로그램을 만들고 있습니다. 의 입력 텍스트 만에 사용자를 제한 할 수있는 방법이 궁금텍스트가 아닌 숫자 만 입력하도록 사용자를 제한하는 방법은 무엇입니까?
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);
}
}
:
typedef struct {
char name[100];
char author[100];
char publisher[100];
char description[100];
char ISBN[15];
int quantity;
} book;
그리고 입력 기능 : 여기
내 선언은 책의 세부 사항을 관리하는 구조체를 사용하고 있습니다 다음 색인 :printf("Book author: ");
fpurge(stdin);
fgets(list[i].author, 100, stdin);
숫자가있는 경우 사용자에게 다시 입력하도록 알립니다. 나는 while 구조체를 사용하려고하지만 각 문자가 숫자인지 아닌지를 검사 할 조건을 생각할 수 없다.
편집 : @yLaguardia 덕분에, 이제는 답을 알고 있습니다. 동일한 질문을 가진 모든 사람들에게 isdigit (변수)를 사용하여 확인하십시오.
C 코드는 사용자 유형을 제한 할 수 없습니다. 코드는 대신 모든 입력을 읽고 그 입력을 원하는대로 처리해야합니다. – chux
"* 각 문자가 숫자인지 아닌지 확인하는 조건 *"=> ['isdigit()'] (http://en.cppreference.com/w/c/string/byte/isdigit)로 충분합니까? – dhke
ASCII를 사용하여 사용자가 입력 한 문자가 숫자인지 비교해 보려면 코드를 으로 변경하십시오. [link] (http://example.com) _italic_ ** bold **'do { printf "책 저자 :"); fpurge (stdin); fgets (list [i] .author, 100, stdin); while (list [i] .author> = 48 && list [i] .author <= 57); –