while 문의 조건식에 관하여 질문드립니다(수정. 이미지 첨부)
CutieBaby
질문 제목 :
while문의 조건식에 대하여
while 문은 조건식에 해당하지 않는 값이 입력되면,
해당 값은 계산이 적용되는건가요?
아니면 계산이 무시된채 while문 전체가 종료되는 것인가요?
질문 내용 :
이런 의문을 가지게 된 것은 다음의 두 가지 경우 때문입니다.
(1)
while ( grade = 0 ) {
printf (성적을 입력하십시오 : );
scanf (%d, &grade);
sum += grade;
n++;
}
sum -= grade;
n--;(2)
printf (두 개의 정수를 큰 수부터 입력하십시오.);
scanf (%d%d, &x, &y);
while ( y != 0) {
r = x % y;
x = y;
y = r;
}
교제에서는 (1)번의 경우에는 마지막에 음수를 입력하여 while문을 종료하고,
원래 필요한 값이 아닌 음수, 즉 센티널 값을 제외해야하기에
while문이 끝난 후 전체 값에서 센티널 값을 빼야한다고 했습니다.(굵은 문장)
그런데 (2)번 경우에는 y=0이 되는 경우를 시행할 경우 연산 자체가 성립이 안됩니다.
가령 36, 24를 입력했을 경우,
첫 시행에서는
r = 36 % 24
x = 24
y = 12
두번째 시행에서는
r = 24 % 12
x = 24
y = 0
그러나 여기서 종료되지 않고 다시한번 시행이 이루어질 경우
12 % 0 이라는 불가능한 연산이 이루어지게 됩니다...
아니면 세번째 시행을 하여 불가능한 연산 때문에 강제적으로 while문이 종료되는 것인가요?
조건식에 맞지 않으면 블록 부분의 연산을 건너뛴채 while문이 종료되는 것으로 알고 있는데,
(1)번의 경우 때문에 뭐가 어찌되는건지 도통 이해할 수가 없습니다...※ 아래의 경우는 i = 128이 되면 조건식에 맞지 않아서 128에 해당하는 연산값이 출력되지 않습니다만,
(1)번의 예시의 설명대로라면 128에 대한 값도 출력되야하는 것 아닌가요?
while문의 매커니즘이 헤깔리네요;
i = 32;
while (i = 127) {
if (i % 8 == 0) {
printf (\n);
}
printf (%c %x , i, i);
i = ++i;
}
==================================================================================
문제가 된 (1)번에 대한 자세한 소스와 실행 결과가 필요한 것 같아서 캡쳐한 사진을 올려봅니다.위의 test.c가 (1)번에 해당하는 소스를 작성한것입니다.
마지막 음수가 연산되는지를 살펴보기 위해 센티널 값을 빼기 전과 후의 sum과 n값을 각각 출력했습니다.
보시다시피 -80이라는 while문의 조건과 맞지 않는 값을 입력했음에도,
while문을 건너뛰지 않고 그대로 연산한 결과가 나왔는데요,
조건식이 범위인 경우에는 범위 밖의 값은 전혀 연산이 되지 않았었는데 이 경우에는 어째서 이렇게 된것인지 도무지 모르겠습니다.
-
보르미
아...grade값의 입력이 조건 판별 이후에 이루어져서 생기는 문제였군요...!
말씀하신 grade값의 진입 순서가 뭔지 이제 알겠네요 ㅎ;
감사합니다. -
이름이없다고
죄송합니다만, 위 프로그램의 실행은 아래와 같은 것 아닌가요?
sum = 0, n = 0 - grade = 50 - sum = 50, n = 1
sum = 50, n = 1 - grade = 60 - sum = 110, n = 2
sum = 110, n = 2 - grade = 70 - sum = 180, n = 3
sum = 180, n = 3 - grade = 80 - sum = 260, n = 4
sum = 260, n = 4 - grade = - -
파라미
grade가 -80일 땐 조건에 안맞아서 반복문 안으로 안들어가고 있네요.
뭘 헷갈려 하시는지 모르겟네요.
반복문 처음 진입할 때의 grade값은 0입니다.
두번째 진입시 50
세번째 진입시 60
네번째 진입시 70
다섯번째 진입시 80
여섯번째는 grade가 -80이므로 진입못하고 나옵니다.
따라서 반복문 안으로는 총 5번 들어갑니다.
grade값이 어디서 변하는지 보시면 되겟네요. -
지음
조건에 맞지 않는 값을 입력했음에도 반복문이 실행된 것이 문제입니다...
새로 이미지와 내용을 첨부했으니 다시한번 봐주신다면 감사하겠습니다. -
핫팬츠
조건에 맞지 않으면 반복문이 품은 내용은 실행되지 않습니다.
헷갈려 하시는건 증감연산자인 ++ -- 인 경우인데 i++ 는 다음 연산에서 1이 증가하므로
와일문이 끝난 다음에 증가값을 뺀 것으로 보입니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692424 | 2차원배열 자료입력질문이요! (1) | 똘끼 | 2025-04-22 |
2692401 | 유닉스안에서 C언어를 이용한 명함 만들기 입니다; 이해안가는 부분이있네요 | 2gether | 2025-04-22 |
2692374 | 고수님들 댓글 마니부탁해요!!! (2) | 엄지 | 2025-04-22 |
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |
2691697 | if 문에서 구조체 배열에 저장되있던 문자열 검사하는 법 ? (2) | 민트맛사탕 | 2025-04-16 |