2009-09-05 4 views
0

간단한 "숫자 합계"코드. 그것은 컴파일되지만 실행될 때 마지막 cout은 실제 사용자 입력 번호가 아니라 num int에 "0"을 제공합니다. 당신은 내가 무엇을 의미하는지에 관해 알기 위해, 그래서 경사 인 경우 제 '정신 분열증'이 올바른 가치를주지 못하고 있습니다 - 왜죠?

는 자신의 컴파일러에 복사하고이를 붙여 주시기 바랍니다.

올바른 "num"값을 출력하려면 어떻게해야합니까? 가 0이 될 때까지

~~~

#include <iostream> 

using namespace std; 

int main() 
{ 
    int num; 
    int sum = 0; 

    cout << "Please type any non-negative integer: "; 
    cin >> num; 

    while (num > 0) { 
    sum += num % 10; 
    num /= 10; 
    } 

    cout << "The sum of the digits of " << num << " is " << sum << "\n"; 

    system("PAUSE"); 
    return 0; 
} 
+0

시스템을 제거했습니다 ("PAUSE"); 그리고 그것은 잘 작동하는 것처럼 보였다. http://codepad.org/bwpGuJF8 (코드 패드를 사용하면 입력을 허용하지 않습니다.) 시스템 호출이 허용되지 않습니다 : SYS_fork – Tom

+0

시스템 ("PAUSE")은 Windows 특정 작업이며, 대부분의 (일부 유닉스 시스템에서) 기본 셸로 피드하려고 시도합니다. << "어떤 키 \ n을 입력" cout을; 원하는 behavir을 얻을 수있는 더 좋은 방법은 CIN 호출하는 것입니다 int wait; cin >> wait; –

답변

11

당신은 모두 함께 num을 수정 봤는데, 그것은 끝에 0 과정의 있도록 (즉, 당신의 while (num > 0) 보장 무엇!이다)! 이전의 내용을 내보내려면 예를 들어를 추가하십시오. 루프 앞에 int orig=num;을 입력하고 끝에 orig을 내 보냅니다.

+1

수정 : while은'num = 0'이 아니라'! (num> 0)'을 보장합니다. 사용자가 -100을 입력하면 -100으로 끝날 수 있습니다. – strager

+0

오른쪽 - 사용자가 음수를 입력하면 그대로 유지되며 '합계'는 0으로 유지됩니다. 특히 좋은 결과는 아니지만, "바보 같은 시스템을 만드는 것은 불가능합니다. 바보는 너무 독창적입니다!" - 적극적으로 어리석은 사용자 입력을 방어하는 것은 실제로 과학 이상의 예술입니다 ;-). –

+0

알렉스 감사합니다! 지난밤에이 질문을 게시하기 전에 나는 "num = orig"(당신이 제안한 것의 반대말)을 시도해 왔고, 결국 "orig"를 낼 때 나는 원래의 값으로 84를 유지했습니다. (? BTW, 왜 내가 그 경우에 얻고 있었다 없음 입력을 문제가 * 항상 출력, 항상 출력으로 "84"준 * 가정 않습니다.) 어떤 경우 는 주문이 엄청나게 작품 - 당신을 다시 감사합니다 ! –

1

문제는 num /= 10num를 변경한다는 것입니다. 이 기능을 사용하려면 모든 계산을 수행하는 데 사용하는 temp 변수를 만들어야합니다.

1

다음 번에 디버거를 사용해 볼 수 있습니다. "버그"를 매우 쉽게 찾을 수 있습니다!