c언어 중첩 while 반복문 질문

whs9400의 이미지

제가 지금 윤성우 c프로그래밍 책으로 while문을 공부하고 있구요. 지금 현재 while 중첩까지 나간 상태인데요.
책의 예제에 구구단이 있더라구요.

#include <stdio.h>
int main(void)
{
    int cur=2;
    int is=0;
 
    while(cur<10)
    {
        is=1;
        while(is<10)
        {
            printf("%dx%d=%d \n", cur, is, cur*is);
            is++;
        }
        cur++;
    }
    return 0;
}

이 소스에서 궁금한게 하나 있거든요.

while문이 어떤 순서로 들어가는지 모르겠습니다.
제일 바깥쪽에 있는 while문 들어가진후 안에 있는 while문이 실행이 되잖아요??

그럼 안에 있는 반복문 한번 실행한후에 다시 바깥쪽 while문으로 나가나요?

is=1;이게 참을 만족하려고 들어간거 같은데요.
만약 안에 while문 실행한후에 바깥쪽으로 나간다면 is=1;로 다시 초기화 되지 않을까요?..

김정균의 이미지

is=1 은 참을 만족하려는 것이 아니라, 초기화를 위해서 인것입니다.
즉, cur 1.. 10 일 동안에 안의 whiel loop를 10번을 각각 돌리기 위해서 인거죠.

KnGer의 이미지

만약 안에 while문 실행한후에 바깥쪽으로 나간다면 is=1;로 다시 초기화 되지 않을까요?..

whlie문을 빠져나가서 is=1;로 초기화가 되는 것이 아니고,
안에 있는 while문을 실행하고(표준출력이 10번 되고,is값은 최종적으로 10이 되고), cur이 2였다면 cur++; 문장으로 cur은 3이 됩니다.
그리고 밑에 더 실행할 문장이 없으므로 while문 조건을 다시 검사합니다.3은 10보다 작으므로 조건을 만족하고 while문 안으로 들어가서 is=1; 이 코드를 만나기 때문에!!! is는 1로 초기화가 됩니다. 그리고 안쪽의 while문 조건을 총 10번 만족하여
다시한번 표준출력이 10번 됩니다. 그리고 cur++.....(이하생략)

굳이 덧붙이자면, '='은 대입연산자입니다. is=1; 이 문장은 is는 1이다 가 절대 아닙니다! is라는 변수에 1이라는 값을 집어넣는다 에 가깝습니다.
while문을 빠져나가서 컴퓨터가 "is는 1이었지?" 하면서 초기화 시키지 않습니다...

whs9400의 이미지

중첩은 음... 바깥하고 안쪽ㅎ3ㆍ는건지...
아니ㅡ아아.... 원리 이해가...

-----------------------------------------------------------------------------------------------------
'Python'

gonny95의 이미지

cur=2,is=1
cur=2,is=2
.
.
.
cur=2,is=9
까지 간다음에
cur=3,is=1로 다시 가는겁니다

whs9400의 이미지

오오 감사합니다. 이걸 원했어요 ㅎㅎ

-----------------------------------------------------------------------------------------------------
'Python'

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.