주어진 조건이 만족되는 동안 문장들을 반복 실행한다.



#include<stdio.h>
int main(void) {
int n;
int i = 1;
printf("출력하고 싶은 단:");
scanf("%d", &n);
while(i<=9) {
printf("%d*%d=%d\n",n,i,n*i);
i++;
}
return 0;
}

#include<stdio.h>
int main(void) {
int i,n,sum;
printf("정수를 입력하시오:");
scanf("%d", &n);
i=1;
sum =0;
while(i<=n) {
sum += i;
i=i+3; // i+3을 다시 i에 저장시켜줘야 함
}
printf("1부터 %d까지의 2씩 증가하는 숫자의 합: %d\n",n,sum);
return 0;
}


센티널 : 입력되는 데이터의 끝을 알리는 특수한 값
#include<stdio.h>
int main(void) {
int grade, n;
float sum,average;
n = 0; sum = 0; grade = 0;
printf("종료 시 음수 입력\n");
while(grade >= 0) {
printf("성적을 입력하시오 :");
scanf("%d", &grade);
sum += grade;
n++;
}
sum = sum - grade;
n--; //마지막 데이터를 제거한다
average = sum/n;
printf("성적의 평균은 %f입니다.\n",average);
return 0;
}
결과

중요한 점은 while 루프 내부에서 사용자로부터 성적을 입력받은 후, 그 값을 sum에 더하고 n을 증가시키는 부분. 그러나 프로그램이 음수가 입력되어 루프를 빠져나올 때, 마지막으로 입력된 음수 성적도 sum에 더해진 상태
그래서 sum에서 마지막으로 입력된 음수 성적을 빼고, 그 성적이 있었던 것으로 간주하여 n을 감소시키는 부분이 중요.
코드에서 sum = sum - grade;는 마지막으로 입력된 성적을 합산에서 제외시키고, n--;는 성적의 개수를 감소시켜서 마지막 성적을 무시하고 성적의 평균을 구함
#include<stdio.h>
#include <limits.h>
int main(void) {
int number, min_value = INT_MAX;
printf("정수를 입력하시오\n 종료는 Ctrl+z\n");
while(scanf("%d", &number)!= EOF) {
//Ctrl+z (EOF, End of File)를 입력하면 입력이 종료되고 최소값이 출력
if(number<min_value)
min_value = number;
}
printf("최소값은 %d", min_value);
return 0;
}
결과

limits.h 헤더 파일은 C 언어에서 정수 데이터 유형의 크기와 한계에 관련된 여러 상수를 정의
CHAR_BIT: char 데이터 유형의 비트 수. SCHAR_MIN: signed char의 최소값. SCHAR_MAX: signed char의 최대값. UCHAR_MAX: unsigned char의 최대값. SHRT_MIN: short int의 최소값. SHRT_MAX: short int의 최대값. USHRT_MAX: unsigned short int의 최대값. INT_MIN: int의 최소값. INT_MAX: int의 최대값. UINT_MAX: unsigned int의 최대값. LONG_MIN: long int의 최소값. LONG_MAX: long int의 최대값. ULONG_MAX: unsigned long int의 최대값.
적어도 한번은 반복 문장을 실행한다

반복할 문장을 수행하므로 무조건 한 번은 실행됨
#include<stdio.h>
int main(void) {
int number,sum = 0;
do {
printf("정수를 입력하시오:");
scanf("%d", &number);
sum+= number;
}while(number!=0);
printf("숫자들의 합 = %d\n", sum);
return 0;
}
결과

#include<stdio.h>
int main(void) {
int i = 0;
do {
printf("1---새로만들기\n");
printf("2---파일열기\n");
printf("3---파일닫기\n");
printf("하나를 선택하세요\n");
scanf("%d", &i);
}while(i<1 || i>3);
printf("선택된 메뉴=%d\n", i);
return 0;
}

- 프로그램을 수행할 때 지정된 위치로 이동시키는 제어 명령문
- 코드 블록 내에서 프로그램의 실행을 종료하거나 다른 명령문 위치로 이동할 때 주로 사용
- C 언어에서 제공하는 분기문
break문, continue문, goto문, return문
#include<stdio.h>
#define SEED_MONEY 1000000
int main(void) {
int year = 0, money = SEED_MONEY;
while(1){
year++;
money += money*0.30;
if(money>10*SEED_MONEY)
break;
}
printf("%d",year);
return 0;
}
continue문을 만나면 블록의 남은 부분을 건너뛰고 다시 반복문을 처음부터 다시 수행
현재의 반복을 중단하고 다음 반복을 시작하게 한다.
for문에서 continue문을 사용하면 증감값으로 강제 분기

#include<stdio.h>
int main(void) {
char letter;
while(1) {
printf("소문자를 입력하시오:");
scanf("%c", &letter);
if(letter =='Q') break;
if(letter < 'a' || letter >'z') continue;
letter -= 32;
printf("변환된 대문자는 %c입니다.\n",letter);
}
return 0;
}
지정된 레이블(lable)로 무조건 이동하라는 강제 명령의 성격을 지닌 분기문#include<stdio.h>
int main(void) {
int x,y;
for(y=1; y<10000; y++){
for(x=1; x<50; x++){
if(_kbhit()) goto OUT;
printf("*")
}
printf("\n");
}
OUT:
return 0;
}