2016-12-24 6 views
4

저는 C#과 프로그래밍 전반에 초보자입니다. 나는 다음 달에 학교를 시작하기 전에 언어의 기초에 익숙해지기 위해 온라인에서 약간의 연습을하려고합니다. 슈퍼 간단한 프로그램을 작성했는데 왜 그 일을하는지 이해할 수 없으며 어디서나 답변을 찾을 수 없었습니다. 여기에 코드가 있습니다.회선 건너 뛰기 루프

 int i, j, rows; 

     Console.Write("\n\n"); 
     Console.Write("Display the pattern like right angle triangle which repeat a number in a row:\n"); 
     Console.Write("-------------------------------------------------------------------------------"); 
     Console.Write("\n\n"); 

     Console.Write("Input number of rows : "); 
     rows = Convert.ToInt32(Console.ReadLine()); 
     for (i = 1; i <= rows; i++) 
     { 
      for (j = 1; j <= i; j++) 
       Console.Write("{0}", i); 
       Console.Write("\n"); 

     } 

이 프로그램은 모두 동일한 숫자를 가진 간단한 피라미드입니다.

내 질문은 루프에 대한 두 번째로는 i을 쓰는하지만 그것은 재 평가 j++j<= 대신 루프의 마지막 실행이 끝날 때까지 \n를 작성합니다. 왜 그런지 모르겠다 고요? 프로그램은 작동하지만 왜 나는 이해하지 못합니다. for 루프가 깨지지 않는 한 for 루프는 항상 모든 것을 실행한다고 생각하지 않습니까?

매우 초보자 질문에 대한 감사와 미안하지만 나를 몰아 치 웁니다!

+3

이것은 파이썬이 아니며 들여 쓰기는 의미가 없습니다. 함께 실행될 때, 내부 루프 아래에있는 두 줄을 중괄호로 묶어 루프 본문으로 만듭니다. 그렇지 않으면 루프 본문은 단일 문입니다. 작성된 것처럼 두 번째 Console.Write는 j가 아니라 i에 적용됩니다. –

+2

@AlexJolig 질문의 요점 인 실수를 "고치고있는"질문에서 코드를 편집하지 마십시오. OP는 들여 쓰기에 대한 혼란을 분명히 나타내었고 "수정"은이 전체 Q & A를 완전히 깨트 렸습니다. –

+0

@KirkWoll 좋아요! –

답변

3

for 루프는 범위에서 모든 것을 실행합니다. {}을 사용하지 않고 for 루프의 범위는 그 다음 줄입니다. 당신과 같이 괄호에 넣어 필요 이상의 명령을 실행하려면

for (j = 1; j <= i; j++) 
{ 
    Console.Write("{0}", i); 
    Console.Write("\n"); 
} 

을 그것은 항상 {} 가독성을 위해 필요한 경우 쉽게 루프를 업데이트해야 할 일반적으로 가장 좋은 방법입니다. 당신은 for 루프를 이렇게 작성할 수 있지만 완벽하게 읽을 수 있습니다.

for (i = 1; i <= rows; i++) 
for (j = 1; j <= i; j++) 
{ 
    Console.Write("{0}", i); 
    Console.Write("\n"); 
} 

위의 코드는 두 번째 for 루프를 첫 번째 범위에서 유지하는 동일한 작업을 수행합니다.

제쳐두고, 당신이 for 루프 밖에서 변수를 선언 한 것을 보았습니다. 프로그래밍에 익숙하지 않은 경우 for 루프의 특정 기능을 인식하지 못할 수도 있습니다.

당신은 for 루프에서 반복자의 권리를 선언 할 수

는 대부분의 경우이 같은 for 루프에서 반복자를 선언하는 것이 좋습니다
for (int i = 1; i <= rows; ++i) 

는 'i'를 for 루프와 같은 범위를 제공으로 .

for 루프의 또 다른 멋진 기능은 세미콜론 사이의 모든 옵션이 실제로 선택 사항이라는 것입니다. 당신은 루프 외부 당신의 반복자를 선언한다면 예를 들어, 당신은 for 루프에서 그것을 생략 할 수 있습니다 :

int i = 1; 
for (; i<= rows; ++i) 

당신은 심지어의 일부 또는 전부를 생략 할 수 있습니다

for (;;) // a perfectly valid for loop that will loop forever. 

을 당신은 할 수 있습니다

for (int i = 0, j = 0; i < 5; ++i, ++j) 
4

프로그래밍 할 때 모든 명령문에는 실행되는 범위 블록이 있습니다. 기본적으로 루프의 경우에는 그 후에 오는 명령문 범위가 하나만 있습니다. for 루프 범위에서 하나 이상의 명령문을 실행하려면 중괄호 {}를 사용하여 코드 블록을 정의하십시오.

두 경우를 실행하려면 이처럼 중괄호를 사용해야합니다.

for (j = 1; j <= i; j++) 
{ 
    Console.Write("{0}", i); 
    Console.Write("\n"); 
} 

최상의 프로그래밍 관행

모든 사용자 조건과 반복 구조에서 중괄호 {}를 사용합니다. 코드를 읽고 이해하기 쉽습니다. 내부 for 루프의 각 반복에서 모두 Console.Write 문이 실행 얻을 것이다

2

당신의 기대는 잘못된 것입니다 :

for (j = 1; j <= i; j++) 
    Console.Write("{0}", i); //inner for loop scope starts and ends on this statement 

은 내부 for 루프 이후에는 중괄호가 없습니다. 따라서 기본적으로 for 문 다음에 오는 첫 번째 문은 내부 for 루프의 범위에서 처리됩니다.

for (i = 1; i <= rows; i++) 
{//outer for loop scope starts here 
    for (j = 1; j <= i; j++) 
     Console.Write("{0}", i); 
    Console.Write("\n"); 
}//outer for loop scope ends here 

그래서 루프 전체 for 내부 루프를위한 외부의 각 반복에서 상기 Console.Write("\n"); 실행한다 : 다음과 같이

for 외부 루프는 중괄호있다.

일반적으로 for 루프 내에서 실행할 명령문이 하나 뿐인 경우 코드 스 니펫에 나와있는 것처럼 탭을 사용하여 들여 쓰기를 수행합니다.