2017-09-11 6 views
1

10 진수를 2 진수로 변환하는 간단한 프로그램이 있습니다. 프로그램을 실행할 때 오류가 발생하지 않지만 단 하나의 물음표가 나타납니다. "00101"같은 값 집합을 가져야합니다. 문자열을 반환하는 함수를 사용하려고합니다. 여기 내 코드는C++ 물음표 출력

#include <iostream> 
using namespace std; 
#include <string> 

string convert(int num) 
{ 
    string binary; 
    int remainder; 
} 

아이디어가 있습니까? 도움을 주셔서 감사합니다.

+0

코드'return binary;'while '은 첫 번째 루프에서 돌아갑니다. 왜 그런거야? – aghilpro

+0

죄송합니다. 문제가 발생한 부분인지 파악하려고했습니다. 나는 그것을 제거하려고 노력했지만 같은 문제가 발생합니다. – CuriousCoder97

+0

정수 값을 문자열로 변환하지 않고 문자열에 할당하려고합니다. 이것은 주요 문제입니다. 난 당신이 코드를 고정 후 다른 논리적 오류를 고칠 수 있다고 생각합니다. :) –

답변

3

이 코드에는 몇 가지 문제점이 있습니다. 먼저, 문자열 binary= 부호 (binary = remainder)를 사용하여 지정합니다. 당신이 쓰려고했던 것은 아마도 binary += remainder이었고 나머지를 문자열에 추가했습니다.

두 번째 문제는 해당 행에도 있습니다. string::operator=string::operator+= 모두 char를 사용하는 오버로드가 있습니다. 이러한 오버로드는 int를 전달할 때 호출됩니다. 따라서 아스키 값이 0 또는 1 인 문자, 즉 물음표 문자로 문자열이 설정됩니다.이 문자는 찾고자하는 문자가 아닙니다. std::to_string을 사용하면 int을 쉽게 문자열로 변환 할 수 있습니다. 또는 형식을 제어 할 수있는 수준이 필요한 경우 this answer과 같이 std::ostringstream을 사용할 수 있습니다.

즉, binary = remainder;binary += std::to_string(remainder)으로 변경하십시오.

세 번째 문제 : while 루프 내에 return 문이 있습니다. num의 크기가 아무리 크면 루프의 한 반복 후에 함수가 반환됩니다. 해당 return 문을 제거하면 convert 함수 맨 끝에 하나만 있습니다.

-1

코드에 기본적인 문제가 있습니다. while 루프는 값을 반환 할 때 한 번만 반복합니다. binaryValue를 매번 remainder와 연결하여 루프 외부로 반환해야합니다. 그리고 논리를 검사하지 않았으므로 확인하십시오.