2014-12-31 5 views
0

10 진수에서 2 진수로 변환하는 프로그램을 만들려고했는데 문제가 있습니다. 내가 가지고있는 것을보고 올바른 방향으로 발을 내주고, 프로그램은 컴파일하지만 음수를 반환합니다. 현재 디버깅 중이지만 컴파일러가 num 변수에 도달하자마자 음수로 나타납니다.C++ 단순 이진수에서 10 진수로 변환

#include <iostream> 
using namespace std; 

int hexConvert(int* num, int Hexes[8]) { 
    //int* Hexes[8] = &Hexes[8]; 
    int empty[8]; 
    for(int i = 0; i < 8; i++) { 
     if(Hexes[i]-*num >= 0) { 
      *num = (Hexes[i] - *num); 
      empty[i] = 1; 
     } else 
      empty[i] = 0; 
    } 
    return empty[8]; 
} 

int Hexes[8] = {128,64,32,16,8,4,2,1}; 

int main() { 
    int num = 0; 
    int here[8]; 
    here[8] = hexConvert(&num,&Hexes[8]); 
    for (int i = 0; i < 8; i++) 
     cout << here[i]; 
} 
+0

으로 게시해야합니다. codereview.stackexchange.com –

+1

int here [8]; 여기 [8] = something;은 UB입니다. –

+0

C++의 배열은 그렇게 작동하지 않습니다. –

답변

1

시도 등 노동 조합하지만 하지 복사 배열을 직접 할 수 있습니다. 이 이유 때문에 배열을 반환하고 다른 배열에 할당 할 수는 없습니다.

somearr[8] 대신 std::array 또는 std::vector을 사용할 수 있습니다. 이러한 stl 컨테이너를 복사하여 문제를 해결할 수 있습니다.

Live Demo here

+0

감사합니다. –

+0

고마워, @ Jarod42. 나는 데모를 업데이트 할 것이다. –

0

포인터를 배열 외부로 전달하고 있습니다. 또한 배열에서 요소를 반환합니다. 8 개 요소의 배열에는 0에서 7까지의 인덱스가 있습니다. 또한 배열을 함수 인수로 전달할 수 없습니다. ++ C에 대한 자습서를 읽고 당신이 구조체를 복사 할 수 있습니다 에서 다시

1

당신은 잘못된 어떤 일을하고 있습니다.

1- 모든 10 진수의 배열로 바이너리를 보관하려고한다고 생각합니다. 이 작업을 수행하려면 2D 배열을 사용해야합니다. (예 : 십진수 : [2,4,7] 바이너리 : [[0,1,0], [1,0,0], [1,1,1])

2에서 배열을 사용 중입니다. 잘못된 방법. 함수를 배열로 보내려면 다음과 같이 사용해야합니다.

// lets say this is a function takes an array 
void foo(int ex[8]); 
. 
. 
. 
int main() { 
int myArray[8]; 
. 
. 
//you must call it like that 
foo(myArray); 
//or 
foo(&myArray[0]); 

3 int []가 아닌 int를 반환합니다. 어쩌면 함수에 출력 매개 변수를 사용하여 도움이 될 수 있습니다.

C++에서 배열 사용법을 검색하고 학습해야합니다. 방문 http://www.cplusplus.com/doc/tutorial/arrays/