2012-09-18 3 views
1

좋아요. 그래서 저는 C에 대해 거의 안다는 말을하고 싶습니다. 저는 고등학교에서 독립적으로 공부하고 있습니다. 그래서 여러분에게 도움을 청했습니다. 나는 C1을 사용하고 있는데 # 또는 ++인지 그냥 C인지 또는 그 차이점이 무엇인지 모릅니다. 어쨌든 내 질문은 어떻게 사용자가 float 대신 정수를 입력하는지 또는 그 사람이 float 입력에 & 기호를 입력하지 않았는지 확인하는 것입니다.C에서 사용자 입력을 어떻게 확인합니까?

메모장에 코드를 저장하고 .c 파일로 저장 한 다음 명령 프롬프트에 gcc로 저장하면 작업중인 항목에 대한 아이디어를 얻을 수 있습니다.

+3

대기 - 어떻게 그것이로 작성 언어를 몰라도 코드를 작성합니까? – Nim

+0

@ 님 제가 배워야 할 교훈이 있습니다. 그들은 내가해야 할 일을 말해 주며, 모든 것을 끝내기 위해 몇 가지 진술을 알고 있습니다. 나는 그것이 무엇인지 불려지는 코드를 알고있다. 도대체 당신이하고있는 일을 모른 채 언어로 프로그램하는 것은 그리 어렵지 않습니다. 프로그램하는 법을 아는 모든 작은 아이들을 생각해보십시오. – ChapmIndustries

답변

0

헤더 파일 ctype.h에 선언 된 함수, 특히 함수 isdigit을 사용할 수 있습니다.

0

음, gcc에 대한 의견으로 C 프로그래밍을하고 있다고 가정합니다. 내가 입력 5.4654, 올바른 번호를 출력합니다

int main(void) 
{ 
    float input; 
    if(scanf("%f", &input) == 1) 
    { 
     printf("OK, I could read your float: %f.\n", input); 
    } 
    else 
    { 
     printf("Not OK, I couldn't read your float.\n"); 
    } 
    return 0; 
} 

경우는 예를 들어, 다음은 거의 검사 다, 당신은 단지 그것을 사용하는 방법을 알고있다, scanf을 사용하는 경우에, 질문에가는 . 5.4&654을 입력하면 5.4이 인쇄되고 거기에는 부동 소수점이 있기 때문에 & 문자까지 나타납니다. 그러나 abc을 입력하면 오류가 발생하고 플로트를 읽을 수 없습니다.

이 이유는 scanf이 성공적으로 읽은 데이터의 수를 반환하기 때문입니다. 따라서 "%f %f %d"을 요청하면 반환 값이 3인지 확인해야합니다. 그렇다면 임의의 문자가 있지만 읽을 수는 없지만 모든 내용이 정상적으로 처리되었습니다. 또는 functions provided by ctype.h을 사용할 수 있습니다.

+0

나는'scanf' 대신'fgets'을 제안합니다. 다음과 같이하십시오. char buff [20]; fgets (buff, size, stdin);'. 'scanf'가 버퍼 오버 플로우로 프로 젝터를 망칠 수 있습니다. 나는 당신이 당신의 입력을 크기를 정할 수 있기 때문에'fgets'로 더 안전하다고 생각합니다. – Chris

+0

문자열 잡기에 꽤 많이 그렇습니다. –

0

가장 좋은 방법은 입력 행을 fgets()으로 읽고 그 행을 구문 분석하는 것입니다. 숫자 입력의 경우 정수의 경우 strtol() 및/또는 부동 소수점 숫자의 경우 strtod()이 가장 포괄적 인 기능입니다.

예를 들어

#include <errno.h> 
#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    char line[100]; 
    char *err; 
    int intval; 

    printf("Enter a number:\n"); 
    fgets(line, sizeof line, stdin); 

    errno = 0; 
    intval = strtol(line, &err, 10); 
    /* check for errors */ 
    if (errno) /* error */; 
    if (*err != '\n') /* error */; 

    return 0; 
} 
관련 문제