2012-09-11 4 views
1

사용자가 4 개의 입력을 차례로 입력해야하는 과제가 있습니다. 그들은 다음과 같습니다 : character, float, float, int.입력 값이 숫자인지 어떻게 확인합니까?

가장 큰 문제는 오류를 확인하고 사용 된 입력이 올바른 입력인지 확인하는 것입니다.

문자 섹션을 끝 냈지만 수와 정수의 경우 숫자 만 입력했는지 확인하고 글자 나 기호를 입력하면 오류 메시지가 인쇄됩니까?

어쩌면 isdigit() 또는 isaplha() 생각할 수 있지만 사용 방법을 잘 모르는 경우.

주 입력에 이미 scanf()을 사용했지만 입력이 유효한지 확인하는 방법이 확실하지 않습니다. sscanf()

+8

어떻게 scanf' 및 반환 값을 확인'에 대해 : 당신이 확인 isdigit()를 사용하려면 그들과 같은 당신이 루프 수있는 모든 자리 값은? –

+1

지금까지 가지고있는 것을 게시 할 수 있습니까? 코드를 일관성있게 유지하려면 문제에 어떻게 접근하고 있는지 확인하는 것이 좋습니다. – Mike

+0

@ 마이크 [태그 : 숙제]로 태그 달기 질문을 추가하지 마십시오. 그것은 죽은 태그이고, 당신은 그것을 청소하고있는 사람들을 위해 일하고 있습니다. http://meta.stackexchange.com/questions/147100/trogdor-ate-my-homework-tag/147125#comment421902_147125 – meagar

답변

2

, 당신은 (%g있는)합니다 (%d 형식 지정자와) 정수 또는 부동 소수점 번호와 같은 일부 데이터 유형으로 문자열의 내용을 구문 분석을 시도 할 수 있습니다.

sscanf()의 반환 값은 텍스트를 원하는 데이터로 해석하는 데 성공했는지 여부를 알려줍니다.

%n을 사용하여 여러 단계로 분석하려는 경우 sscanf()의 문자 수를 알 수 있습니다. 사용자가 문자열, 두 개의 부동 소수점 숫자와 정수를 입력해야하는 경우

+0

현재 사용중인 값 : fgets (buff, sizeof (buff), stdin); sscanf (버프, "% s % f % f % i", & 문자, 시작, 끝, 끝) % d 또는 % n을 사용하여 '시작'의 잘못된 문자를 제거하는 방법은 무엇입니까? 코드를 보여줄 수 있습니까? –

+0

if (sscanf (buff, "% s % f % f % i", & letters, & start, & end, & inter) <4) {/ * error * /}'를 시도하십시오. –

+0

그래서 나는 그것을 달리고 들어갔다 : abcd 4.5 4.6 5h 그리고 여전히 성공적인 메시지를 받았습니다. 끝에있는 'h'는 허용되지 않습니까? 어떤 아이디어? –

3

,

char s[1024]; 
float f1, f2; 
int i; 

if (sscanf (buff, "%s %f %f %d", s, &f1, &f2, &i) == 4) { 
    /* Could scan values as expected. */ 
} else { 
    /* Input not as expected. */ 
} 

sscanf 이후 수익률 성공적으로 스캔 된 값의 수를 사용합니다. 자세한 내용은 sscanf 매뉴얼 페이지를 참조하십시오. %s으로 제한되지 않은 문자열을 스캔 할 때 큰 입력에 문제가 있음에 유의하십시오. 이것은 숙제에 대해서는 문제가되지 않지만, 프로덕션 소프트웨어에서는 확실히 알고 있어야합니다.

1

귀하의 게시물에서 언급 한 것처럼 scanf()를 사용하는 것 이외의 다른 방법으로 귀하의 가치를 현재 어떻게 받고 있는지 모르겠습니다. 그래서 여러분이 다음과 같이하면 : float/int 값을 얻기 위해

char buf[100];  
scanf("%s", buf); 

을 말합니다.

int i = 0; 

//need to check for a . for floats 
//need to check for a - for negative numbers 
while(isdigit(buf[i]) || buf[i] == '.' || buf[i] == '-') 
    i++; 
if(i == strlen(buf)) // if we made it to the end of the string 
    //we have all digits, do all digit code 
else 
    //there are numbers or symbols, ask for the number again, or terminate, or whatever 
+0

감사합니다. –

+0

도와 주시면 문제가 해결되었다는 것을 다른 사람들이 알 수 있도록 답변을 수락하는 것을 잊지 마시기 바랍니다. – Mike

+0

how ??????????????????????????? –

관련 문제