2014-12-03 7 views
0

> 부동 소수점과 나는 다음과 같은 문제에 대한 솔루션을 찾을 수있다 : 나는 명령 줄을 구문 분석 할 필요가확인 입력 문자열이 특정 문자에서 구성 여부 - 내가 (C) 프로그래밍에서 절대 초보자입니다 수

을 구조체의 부동 소수점 인수. 이것은 argc, argvatof을 사용하면 아주 잘 작동합니다. 그러나 사용자가 유효한 "부동 문자"(0-9.)를 입력했는지 여부를 확인하는 방법이 있습니까?

atof은 구문 분석 할 문자열의 시작 부분에 숫자가없는 경우 오류 0.0 만 반환합니다. 사용자가 예를 ./programname 4,5을 위해 쓰는 경우, atof 여전히

내가 모든 단일 제출 캐릭터와 추가를 확인해야 할 것 ... 내 플로트에 4을 작성, 사용자가 하나 이상의 . 사용 여부를 확인하기 위해 카운터를 설정 . 이것을 어떻게 효율적으로 얻을 수 있습니까?

편집 : 감사합니다. 내 프로그램은 0에서 9.의 정수로 구성된 문자열 만 변환합니다. 나는 그것을 언급하는 것을 잊었다! 지금은 하나의 while 루프를 사용하여 유효한 문자를 포함하는 문자열을 입력 문자열과 비교하는 함수를 작성하려고합니다. 난 단지 두 번째와는 argv (argv[1]argv[2])의 세 번째 argmunent을 검사 할 때, 나는 그것을 달성하기 위해 나머지 외부 루프에 대한 두 번째를 사용 ...

+0

무엇' "-3"'' "1E-3"'등에 대해? 그들이 숫자와'.'로만 구성되어 있지 않기 때문에 거부 될까요? –

답변

0

당신이 있는지 확인하기 위해 sscanf 및 더미 문자를 사용할 수 있습니다 전체 문자열은 this answer에로, 변환 또는되지 않은 :

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

int main(int argc, char* argv[]) 
{ 
    char dummy; 
    float f; 
    if(sscanf(argv[1], "%f%c", &f,&dummy) != 1) 
    printf("Input error.\n"); 
    else 
    printf("%f\n", f); 
} 

Live demo here

+0

하지만 행복하게 "1e-3"을 변환 할 것입니다. 이것이 의도 된 것인지 확실하지 않습니다. –

+0

감사합니다. 내 프로그램은 '0'에서 '9'까지의 정수와'.'로 구성된 문자열 만 변환하려고합니다. 나는 그것을 언급하는 것을 잊었다! 지금은 하나의 while 루프를 사용하여 유효한 문자를 포함하는 문자열을 입력 문자열과 비교하는 함수를 작성하려고합니다. argv (argv [1]'과'argv [2]')의 두 번째와 세 번째 argmunent를 확인하기를 원하기 때문에 나머지 부분은 두 번째 루프를 사용하여 그 결과를 얻는다. – ljagg

+0

그러면 나는 형식을 수동으로 확인하십시오. 또는 정규식,하지만 당신은 두 가지 문제가있어. – rubenvb