2010-05-30 2 views
0

저는 C의 기초를 배우고 간단한 1 차 방정식 솔버를 작성하고 있습니다. 입력이 정확히 ax + b = c 또는 ax-b = c이고, 여기서 a, b, c는 double 유형입니다. scanf()를 사용하여 사용자 입력을 읽고 올바른 형식인지 확인합니다. 그러나, 네거티브 더블을 입력하면 방정식의 "a"로 -4.6이 표시되고 scanf()은 a, b, c를 올바르게 읽지 않습니다. 내 안에 % lf을 (를) 사용하고 있습니다. scanf(). 그렇다면 네거티브 더블을 어떻게 읽어야합니까? 많은 감사합니다.C에서 scanf()를 사용하여 네거티브 double을 읽는 방법?

내 코드 : 그것이 잘못 때 어디서 얻었

#include <stdio.h> 
int main(void) 
{ 
    double a,b,c,x; 
    printf("Enter the expression:\n"); 
    if (scanf("%lfx%lf=%lf", &a, &b, &c) == 3) 
    { 
    x = (c - b)/a; 
    printf("x=%.2f\n", x); 
    } 
    else if (scanf("%lfx+%lf=%lf", &a, &b, &c) == 3) 
    { 
     x = (c - b)/a; 
     printf("x=%.2f\n", x); 
    } 
    else 
     printf("Invalid expression\n"); 
    return 0; 

} (대신 fgets()sscanf(), 말,의) 직접 scanf()를 사용에 어려움

+2

코드를 게시하십시오. 'scanf'는'-4.6'을 잘 읽어야합니다. – IVlad

+1

필수 :'scanf'를 사용하지 마십시오. 대신'fgets'와'sscanf'를 사용하십시오. http://c-faq.com/stdio/scanfprobs.html – jamesdlin

+0

내가 게시 한 코드가 GCC 컴파일러에서 예상대로 작동합니다. 어떤 컴파일러를 사용하고 있습니까? 문제를 나타내는 전체 코드를 게시 할 수 있습니까? 프로그램의 다른 위치에서 변수를 수정 중일 수 있습니다. – IVlad

답변

2

하나가 일하고있다.

scanf()이 성공적인 전환 수를 반환한다는 사실을 알면 도움이됩니다. 다음을 테스트해야합니다.

데이터가 정확하고 EOF가없는 한 제대로 작동해야합니다. 즉, 통화가 잘 형성됩니다. 그것이 발생하는 맥락은 그렇게 깨끗하지 않을 수도있다.

또한 두 용어 사이에 '+'또는 '-'를 허용하고 싶으므로 다음 토큰을 읽을 토큰 화 메커니즘으로 이동해야합니다 (음수, 'x', a '+'또는 '-', 다른 숫자 (음수 일 수도 있음). 그런 다음이를 해석 할 수 있습니다. 사용자가 '-2.3x-4.5 = 9.1'을 입력하면 scanf()을 사용하는 것이 재앙입니다. (두 번째) '-'에서 검사가 실패하면 돌아가서 음수 형식으로 전체 데이터를 다시 읽을 수 없습니다 . 또는 구분 기호 '+'또는 '-'를 char 값으로 읽어야합니다.

+0

감사합니다. 읽음으로서 문제가 해결되었습니다. 귀하의 답변과 내가 뭘하는지 돌아가려는/첫 번째 scanf() 실패 할 경우 사용자 입력을 다시 읽으려고 노력하고있다. 그 불가능한 것처럼, 기호를 읽는 데 char 변수를 사용하여 힌트를 사용하여 b 앞에 해결 문제. – rize

관련 문제