2014-03-24 3 views
0

문자열을 double로 변환하는 데 문제가 있습니다. 제발 도와주세요. DIFF 파일을 실행하는 동안문자열을 C로 double 변환

char Price[100]; 
double newPrice; 
printf("\nPlease enter the price:"); 
fgets(Price,100,stdin); 
newPrice = atof (Price); 
printf("\nPrice of item is %f",newPrice); 

그것은 사랑하는 출력을 제공 :

여기 내 코드입니다.

FILE1 (방법 1)

char Price[100]; 
double newPrice; 

int main() 
{ 
    myval(); 
    return 0; 
} 

myval() 
{ 
    printf("\nPlease enter the price:"); 
    fgets(Price, 100, stdin); 

    newPrice = atof(Price); 
    printf("\nPrice of item is %f", newPrice); 
} 

파일 2 (방법 2)

#define MAX 50 

char oldPrice[MAX]; 
double newPrice; 

int main() 
{ 
    UserInput(); 
} 

int UserInput() 
{ 
    printf("\nPlease enter the price:"); 
    fgets(oldPrice, MAX, stdin); 

    newPrice = atof(oldPrice); 
    printf("\nPrice of item is %f", newPrice); 

    return 0; 
} 

위의 두 가지 방법은 TCC (작은 컴파일러)을 사용하여 컴파일되었다. 두 가지 방법 모두 동일하지만, 나는이 2 출력 1의은 diff 출력을 얻을 :

D:\>new.exe 

Please enter the price:12.3 

Price of item is 12.300000 

출력 2 :

D:\>t.exe 

Please enter the price:12.3 

Price of item is 7735248.000000 
+0

기술적으로 두 함수 사이에는 차이가 없습니다 (첫 번째 예제의 'myval' 함수에서 무언가를 반환하지 않음으로써 정의되지 않은 동작 제외). 시도하기 전에 표시된 코드로 두 번째 예제를 빌드 하시겠습니까? –

+0

@ JoachimPileborg - 나는 그것을 이해하지 못한다. 그러나 [ideone에 대한 재발견] (http://ideone.com/PBG2K1) – Chowlett

+0

아, [첫 번째 것도 실패한다] (http://ideone.com/U8JUnd). 나는 아직도 모르지만 _why_. – Chowlett

답변

0

당신은 당신의 파일에 포함 누락을.

#include <stdlib.h> 

당신은 atof에 적합한 프로토 타입을 얻을 수 <stdlib.h>을 포함해야합니다 또한 Converting char* to float or double

+0

고맙습니다 .. lib 파일을 포함하여 답변을 얻었습니다 – eminem92

1

참조 : 그와

double atof(const char *); 

, 예상대로 동작입니다. (당신이 첫 번째 발췌 문장을 포함 시켰지만 두 번째 발췌 문장은 포함하지 않았다고 생각합니다.)

컴파일러는 프로토 타입없이 함수 사용에 대해 경고해야합니다. 프로토 타입없이 함수를 사용하는 것은 C89에서 합법적이지만 컴파일러는 반환 값이 int이라고 가정합니다. 그것과 printig 형식을 알 수없는 값으로 printf 이상한 출력으로 이어질 것으로 보인다.

C99 및 더 새로운 표준에서는 프로토 타입없이 함수를 사용하는 것은 불법입니다. 컴파일러가 지원한다면 적어도 C99를 사용하는 것이 좋습니다. 컴파일러 경고를 켜십시오.

+0

감사합니다 @MOehm – eminem92