2016-12-12 5 views
2

구조체 및 함수를 사용하여 책 세부 정보를 입력하는 프로그램을 만들고 있습니다. 의 입력 텍스트 만에 사용자를 제한 할 수있는 방법이 궁금텍스트가 아닌 숫자 만 입력하도록 사용자를 제한하는 방법은 무엇입니까?

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 (변수)를 사용하여 확인하십시오.

+2

C 코드는 사용자 유형을 제한 할 수 없습니다. 코드는 대신 모든 입력을 읽고 그 입력을 원하는대로 처리해야합니다. – chux

+0

"* 각 문자가 숫자인지 아닌지 확인하는 조건 *"=> ['isdigit()'] (http://en.cppreference.com/w/c/string/byte/isdigit)로 충분합니까? – dhke

+0

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); –

답변

3

ctype.h에있는 isdigit() 또는 isalpha() 함수를 사용하여 확인할 수 있습니다. 이 표를 사용하여 직접 사용자 입력의 ASCII 값을 비교할 수도 있습니다. http://www.asciitable.com/

+0

isalpha()가 올바른 것입니다. 나는 응답을 고쳤다. 감사 – AndyW

관련 문제