2012-01-27 4 views
1

여기에 4 자리 hexa를 dec로 변환하려고 시도했지만 성공하지 못했습니다. 여기 내 코드가 있습니다.부호가없는 int 배열에서 16 진수를 10 진수로 변환합니다.

unsigned int array[4];       

printf("Type in 4-digit hexa: \n"); 

scanf("%x", &array); 

while(getchar() != '\n'); 

printf("Your number in dec is %u \n", array); 

나는 무엇이 잘못 되었는가는 모르지만 정확한 dec 출력을 제공하지는 않습니다. EEFF를 넣었을 때처럼 61183을 내고 프로그램에서 65518을 인쇄했습니다.

어디에서이 번호가 나옵니까? 내 코드에 무슨 문제가 있습니까? 나는 FFFF가 65385와 같고 unsigned int의 범위가 0에서 65535 사이 인 것으로 간주하여 부호없는 int를 사용했습니다. 데이터 범위에 문제가 없어야하고 % u도 사용했습니다.

일부 검색을 한 후에 생각할 수있는 유일한 점은이 문제는 int 또는 sth에 대한 부호없는 int의 크기와 관련이 있습니다. 설명을 읽었지만 이해가되지 않았습니다.

나는 이것이 중복 일지 모르지만 여기서는 더 쉬운 설명을 묻습니다. 이것이 작동하지 않는 이유는 무엇입니까? 솔직히 말해서, 나는이 사이트와 프로그래밍 모두를위한 절대적으로 새롭다. 그래서 코딩과 함께 나에게 쉽게 가보 십시다. 참고로 저는 stdio.h 바깥에있는 것을 전혀 알지 못합니다.

+0

"unwind"코드를 사용하여 시도해 보았는데 아름답게 작동했습니다. 고맙습니다, 긴장을 푸십시오, 그리고 여기에 와서 나를 도왔던 모든 사람들! –

+0

FYI http://www.cplusplus.com/ -이 사이트에는 많은 예제가 있으며 c/C++의 아름다움을 이해하는 데 도움이 될 수 있습니다 .... – enam

+0

권장 해 주셔서 감사합니다. 나는 확실히 그것을 파헤쳐 볼 것입니다. : D –

답변

6

array의 포인터를 printf()에 전달하고 있습니다. 여기서 어레이를 설치할 필요가 없습니다. 스캔하고 인쇄하려는 것은 단일 번호입니다.

unsigned int number; 

printf("Type in 4-digit hex:\n"); 

if (scanf("%x", &number) == 1) 
    printf("Your number in dec is %u \n", number); 

는 또한 scanf()는 반환 값을 검사하여, 성공인지 아닌지 확인하는 좋은 아이디어를 간주 있습니다.

unsigned int val; 
printf("Type in 4-digit hexa: \n"); 
scanf("%x", &val); 
printf("Your number in dec is %u \n", val); 
+0

답변 해 주셔서 감사합니다. 그러나 답변에 따르면 "if (scanf ("% x ", & number) == 1)"? –

+0

scanf()가 성공했는지 여부를 확인하는 과정에서 프로그램을 단계별로 추적했지만 나에게 단서가 표시되지 않습니다. 입력 창 (4 자리 hexa)을 타이프하기를 원하는 출력 창을 팝업으로 보여 주며 바로 결과를 보여주었습니다. 32 비트 Windows OS에서 TC 컴파일러를 사용하고 있습니다. –

+0

단서는 scanf의 반환 값입니다. 이것은 성공적으로 변환 된 형식 지정자의 수입니다. 왜 이것이 1과 비교 될까요? – Jens

2

당신은 그것을위한 배열을 필요가 없습니다. array[0]이 아니라 array입니다.

(선택 사항) b. array으로 스캔하십시오. &array이 아닙니다.

c. getchar()의 요점은 무엇입니까?

+0

답을 잘 주셔서 감사합니다. 또 다른 질문은, 내가 할 수있는 경우, 정확히 배열이 필요할 때입니까? 입력이 4 자리이므로 4의 배열을 설정하므로이 경우 배열이 필요하다고 생각했습니다. –

1

A :

+0

왜 배열 [배열]이 아닌 배열입니까? getchar()에 대해서는 "\ n"의 값을 검사하여 저장하지 않는다는 점에 유의했습니다. –

+0

a. 'array'는'unsigned int' 배열입니다. 이 배열의 시작 부분에있는'unsigned int '를 출력하고 싶습니다. 그러므로,'array [0]'. 기음. 그런 식으로하지 마라. 'scanf'는 수표를 찍기에 충분히 똑똑합니다. (그리고 사실 scanf의 getchar'after'을 수행하기 때문에 작동하지 않는 것입니다. – asaelr

+0

오, 감사합니다! getchar()이 작동하는지 또는 내가 프로그램을 추적했는지를 확인하려면 어떻게해야합니까? 그것은 나를 많이 도와주지 않았다. –

-1

아니요. 아니요. 문자의 한 점에 문자열로 입력해야합니다. 그 후에 숫자로 변환합니다. 예

char *str=char[10]; 
int i=0,num=0; 
printf("Type in 4-digit hexa: "); 
scanf("%s",str); 

for(i=0;str[i]!='\0';i++) 
    if(str[i]>='0' && str[i]<='9') num=16*num+str[i]-'0'; 
    else if(str[i]>='a' && str[i]<='f') num=16*num+str[i]-'a'; 
    else if(str[i]>='A' && str[i]<='F') num=16*num+str[i]-'A'; 

printf("Dec is %d",num); 
+0

정말 고마워하지만 for 루프에서 if-else 조건을 이해하지 못해서 용서해 주시기 바랍니다. 설명해 주시겠습니까? –

+0

왜'scanf'가 숫자 변환에 텍스트를 쓰게할까요? 또한 전환 코드는 매우 못 생기고 중괄호가 필요합니다. 'char * str = char [10]'은 무엇입니까? – ugoren

관련 문제