for 문 비교구문 질문 (for문 안으로 들어가지 않는 문제)

high385의 이미지

Visual Studio2010에서 빈프로젝트 하나 생성하고 cpp 파일 하나만 생성 후 하기 작업 시에 (1), (2)번에서 에러가 발생합니다.

#include

void main() {
// error
unsigned int vaR = 1;
for (int off1 = -2*vaR;off1<=2*vaR; ++off1){ //for 문 안으로 안들어감 (1)
printf("%d\n", vaR);
}

// error
vaR = 2;
for (int off1 = -vaR;off1<=vaR; ++off1){ //for 문 안으로 안들어감 (2)
printf("%d\n", vaR);
}

// okay
vaR = 3;
for (int off1 = 0;off1<=vaR; ++off1){ //for 문 안으로 들어감 (3)
printf("%d\n", vaR);
}

// okay
vaR = 4;
for (int off1 = -vaR;off1<=0; ++off1){ //for 문 안으로 들어감 (4)
printf("%d\n", vaR);
}

// okay
int val = 5;
for (int off1 = -val;off1<=val; ++off1){ //for 문 안으로 들어감 (5)
printf("%d\n", val);
}
}

위 코드에서 (1), (2)번에서 for문으로 들어가지 않는 이유를 모르겠습니다.

(3), (4), (5)와 같이 사용하면 되겠지만 (1), (2)의 에러 케이스의 이유를 정확히 알려주세요..

타인이 코딩한 프로젝트에 제가 추가하는 경우 기존 변수를 사용하다가 (1), (2)와 같은 경우가 발생해서 애먹었네요..

이유 좀 알려주세요.

shint의 이미지

별도로 해보니. 그런 문제가 발생하지 않았습니다.

- 별도로 만들어보거나.
- 한줄씩 지워서 테스트 하는 방법이 있습니다.

배열에 범위를 넘는 값을 입력하면. if()문도 뛰어넘는 오류가 발생하기도 하니 주의하시기 바랍니다.
try catch 를 사용하거나.
메모리 릭을 확인하시기 바랍니다.

    printf("%d\n", sizeof((int)Val));
    printf("%d\n", sizeof(Val));

크기는 4로 똑같이 나옵니다.

혹시. Val 를 전역변수로 지정한 걸지도 모르죠...

Val 에 데이터값을 출력해보세요.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

shint의 이미지

DevC++ 로 확인해본 결과.
unsigned int vaR = 1; -----> int vaR = 1; 로 수정.

- 마이너스값을 처리하려면. unsigned 를 빼셔야 합니다.
- (int) 명시적 형변환을 해줘도 되기는 하네요. 하지만. 값이 맞는지 모르겠습니다. 위험하겠죠.??
vaR = 2;
printf("%d\n",(int)-vaR); //-2가 나옵니다.

// error
unsigned int vaR = 1; 
 
for (int i = -2*(int)vaR; i<=2*(int)vaR; ++i){ //for 문 안으로 안들어감 (1)
printf("1 %d\n", vaR);
}
 
// error
vaR = 2;
for (int off1 = (int)-vaR;off1<=(int)vaR; ++off1){ //for 문 안으로 안들어감 (2)
printf("2 %d\n", vaR);
}

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

HDNua의 이미지

Windows:
Visual Studio Compiler, ideone.com

Linux: (Ubuntu 12.04 LTS)
gcc 4.6.2

제가 테스트해본 위 환경에서는 문제없이 TEST가 잘 출력됩니다.

#include <iostream>
 
class A {
    // ISO C++ forbids in-class initialization of non-const static member
    // unsigned int Val = 4; 
    void func();
 
public:
    void Func() {
        func();
    }
};
 
void A::func() {
    int off1 = 0;
    unsigned int Val = 4; 
 
    for (off1 = 0; off1 <= Val; off1++) {
        std::cout << "TEST" << std::endl;
    }
}
 
 
int main(void) {
    A a;
    a.Func();
 
    return 0;
}

어떤 환경에서 빌드하시고 실행하셨는지 말씀해주셔야 할 것 같아요.

저는 이렇게 생각했습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.