2012-11-16 2 views
3

빠른 fizzbuzz 응용 프로그램을 사용하여 C++ 기술을 테스트하고 싶었습니다. 그 코드는 아래에 게시되어 있습니다. 그러나,이 응용 프로그램을 실행하면 뭔가 미친 일이 발생합니다. 내 코드는 다음과 같습니다.FizzBuzz 재해

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

bool ismultiple3(int i) { 
    int res = i%3; 
    if (res == 0) 
    return true; 
    return false; 
} 

bool ismultiple5(int i) { 
    int res = i%5; 
    if (res == 0) 
    return true; 
    return false; 
} 

int main() { 
    string output; 
    for (int i = 1; i <= 100; i++) { 
    output = i; 
    if (ismultiple5(i) || ismultiple3(i)) { 
     output = ""; 
     if (ismultiple3(i)) output.append("Fizz"); 
     if (ismultiple5(i)) output.append("Buzz"); 
    } 
    cout << output; 
    } 
} 

그래서 실행하고 컴파일하면 내 전체 터미널이 엉망이됩니다. 문자 인코딩이 어떻게 든 변경되는 것 같습니다. 그것은 여전히 ​​명령을 정상적으로 받아들입니다. 그냥 보입니다. 이걸 설명하기 위해 ls를 실행했습니다. Compiled, ran, and ls Remainder of ls command

편집 : 경우 사람이 가로 지르는에서 컴퓨터의 g ++ 컴파일러는 C++ 11 지원이 부족하기 때문에, else가 문을 추가하고 그 안에 cout << i을하고 끝났다. 함수는 단축되어 두 개의 인수, 즉 in을 허용하는 단일 함수로 결합되었습니다.

+7

'output = i' 라인은 여러분이 생각하는대로하지 않습니다! – ruakh

+1

'to_string'함수가 편리해야합니다. 또한'ismultiple '함수는 필요한 것보다 길다. –

+5

나는 내 다음 밴드 이름에 대해이 질문 제목을 훔치고있다. – Blastfurnace

답변

3

, output = i 여기서 문제입니다. i의 값은 int에서 char으로 변환되며, 해당 루프를 실행할 때 문자열과 시퀀스 ASCII characters이 남습니다. 예 : 97 == 'a', 144 == 'É' 등입니다.

if-else 블록 내에 세 개의 cout << ... 호출을 단순히 갖기 위해 main 함수의 논리를 다시 작성하는 것을 고려할 것입니다. 또한 간결성을 위해 ismultipleN() 기능을 간단히 (i % 3 == 0)으로 바꿀 수 있습니다.

+0

앞서 언급했듯이, 나는 스스로를 더 명확하게 만들기 위해 기능을 확장했습니다. 그래도 조언 주셔서 감사합니다. – Nathan

2

대신

output = i; 

의 당신은 this answer에 제안 된 방법 중 하나를 사용합니다. 예를 들어

: 다른 댓글이 말했듯이

std::string to_string(int x) { 
    std::stringstream out; 
    out << x; 
    return out.str(); 
} 
+0

to_string()을 사용해 보았지만 g ++의 내 버전에는 C++ 11 지원이 없습니다. Yaaaay. 스트림은 스트림을 플러시하는 단순한 방법이없는 한 구조 조정이 필요합니다 (fizzbuzz 어플리케이션에서는 이미 너무 복잡합니다). – Nathan

+1

@derekwolf, http://stackoverflow.com/a/13388063/5987을 참조하십시오. 그렇지 않으면 명령 행 스위치를 사용하여 C++ 11을 활성화해야합니다. –

+0

@derekwolf : 내 게시물을 약간 수정했습니다. 해당 게시물의 예제 중 하나를 쉽게 가져 와서 내가 가지고있는 함수로 변환 할 수 있습니다. 그런 다음'output = i' 대신에'output = to_string (i)'를 실행해야합니다. –

관련 문제