코딩을 하다 보면 조건에 따라 특정한 코드를 실행하거나, 실행하지 않아야 하는 경우가 있습니다.
또한 어떤 경우에는 같은 코드를 반복적으로 실행해야 하는 경우도 있습니다.
이번 포스팅에서는 그러한 방법에 대해서 알아보도록 하겠습니다.
If문
if문은 다음과 같이 사용합니다.
# include <stdio.h>
int main() {
int a = 0;
if(a > 0)
printf("%d", a);
if(a < 3) {
printf("%d", a);
}
return 0;
}
위 코드의 결과는 1입니다.
# include <stdio.h>
int main() {
int a = 0;
if(a > 0){
printf("%d\n", a);
}
else {
printf("%d\n", a+1);
}
if(a < 3){
printf("%d\n", a);
}
else {
printf("%d\n", a+1);
}
return 0;
}
위 실험의 결과는 다음과 같습니다.
Dangle else (매달린 else)
# include <stdio.h>
int main() {
int a = -3;
if (a > 0)
if ( a < 3)
printf("%d\n", a);
else
printf("%d\n", a+1);
return 0;
}
위 코드를 실행하면 아무 코드도 실행되지 않습니다.
else는 가장 가까운 if문과 짝이 되기 때문에, 위 코드의 else는 if(a<3)인 if문에 짝이 됩니다.
조건문 안에 지정문 사용
저번 글에서 살펴보았듯이 C언어에서는 Boolean 대신 정수형을 빌려, 0일때 거짓, 0이 아닌 값일 때 참으로 사용한다고 했습니다.
그리고 지정문을 사용하면, 해당 지정문의 결과로, 지정된 값 (r-value)가 반환됩니다.
따라서 다음과 같이 조건문 안에 지정문을 사용할 수 있습니다.
# include <stdio.h>
int main() {
int a = 0;
if(a = 0)
printf("%d", 100);
else
printf("%d", -100);
return 0;
}
위 코드의 결과는 -100이 됩니다.
a= 0의 결과로 0이 반환되므로, if문의 식이 거짓이 되기 때문입니다.
# include <stdio.h>
int main() {
int a = 0;
if(a = 100)
printf("%d", 100);
else
printf("%d", -100);
return 0;
}
위 코드의 결과는 a=100의 결과로 100이 반환되므로, 조건문의 식으로는 0이 아닌 값이 들어가 따라서 참이 됩니다.
Switch 문
if문 말고도 조건에 따라 실행되는 코드를 결정할 수 있는 또 다른 방법이 있는데, 바로 switch문 입니다.
switch문에는 정수(int, long, char)변수만 사용이 가능합니다.
# include <stdio.h>
int main() {
int a;
printf("가위(1), 바위(2), 보(3)!:");
scanf("%d", &a);
switch (a){
case 1:
printf("\n가위를 냈군\n");
break;
case 2:
printf("\n바위를 냈군\n");
break;
case 3:
printf("\n보를 냈군\n");
break;
default:
printf("\n잘못 냈군\n");
}
return 0;
}
실행 결과는 다음과 같습니다.
Switch문을 사용할 때는 반드시 하나의 case가 끝날 때, break를 붙여주어야 합니다.
만약 붙여주지 않으면 case 아래에 존재하는 모든 case들의 코드가 다 실행되게 됩니다.(아래 조건들은 조건에 해당되지 않아도 실행됩니다.)
break 없는 Switch문의 예시를 하나 보도록 하겠습니다.
# include <stdio.h>
int main() {
int a;
printf("가위(1), 바위(2), 보(3)!:");
scanf("%d", &a);
switch (a){
case 1:
printf("\n가위를 냈군\n");
case 2:
printf("\n바위를 냈군\n");
case 3:
printf("\n보를 냈군\n");
default:
printf("\n잘못 냈군\n");
}
return 0;
}
위 코드를 실행하고 1을 입력하면 결과는 다음과 같습니다.
2를 입력하면 다음과 같은 결과가 나옵니다.
반복문
배열에 있는 원소들을 반복해서 출력하는 등의 반복되는 작업을 수행하기 위해서 반목문을 사용할 수 있습니다.
반복문에는 크게 for문과 while문이 있으며, while은 기본적인 while문과 do-while문으로 나뉩니다.
while 문 VS do-while문
# include <stdio.h>
int main() {
int count = 11;
int sum = 0;
while (count < 10){
sum += count;
count ++;
}
printf("%d\n", sum);
return 0;
}
위 코드의 결과는 0입니다.
count는 처음부터 11이었고, 따라서 while문의 조건문의 결과는 0(거짓)이 나와 코드가 수행되지 않습니다.
그러나 이는 do-while문을 사용하면 다음과 같이 결과가 바뀝니다.
# include <stdio.h>
int main() {
int count = 11;
int sum = 0;
do{
sum += count;
count ++;
}while (count < 10);
printf("%d\n", sum);
return 0;
}
위 코드의 결과는 11입니다.
위의 결과를 통해 알 수 있듯이, do-while문은 무조건 한번은 실행됩니다.
즉 조건에 상관없이 무조건 한번은 실행되는 코드를 작성해야 할 때, do-while문을 사용할 수 있습니다.
for 문
for문은 다음과 같은 형식으로 작성합니다.
for (초기화; 조건문; 증감문){ 실행할 코드;... }
또한 for문의 각 요소는 생략이 가능합니다.(생략을 하기 위해서는 그냥 공백으로 둔 후 ;만 붙여주시면 됩니다.)
다음은 사용 예시입니다.
# include <stdio.h>
int main() {
int i = 1;
int j = 1;
for(i = 1; i<=9; i++)
for(j = 1; j<=9; j++)
printf("%d X %d = %d\n", i, j ,i*j);
return 0;
}
이 코드의 결과는 1~9까지의 구구단의 결과를 출력합니다.
반복문을 통한 문자열 입력받기
반복문을 사용해여 문자열을 입력받을 수 있습니다.
주로 사용되는 코드들을 살펴보도록 하겠습니다.
# include <stdio.h>
int main() {
int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
return 0;
}
위 코드의 결과는 다음과 같습니다. (추가로 맥북에서는 control + D를 눌러야 EOF이며, 윈도우에서는 Ctrl + Z를 눌러야 EOF입니다.)
아래 코드는 바로 위의 코드와 동일한 기능을 수행합니다.
# include <stdio.h>
int main() {
int c;
while (10) {
c = getchar();
if(c != EOF)
putchar(c);
else
break;
}
return 0;
}
버퍼 속 문자 비우기
다음과 같은 코드가 있다고 가정하겠습니다.
# include <stdio.h>
int main() {
int c;
c = getchar();
printf("%c\n", c);
c = getchar();
printf("%c\n", c);
return 0;
}
위 코드를 실행하고 하나의 문자만 입력한다면 결과는 다음과 같습니다.
두번째 c=getchar()를 통해 \n 문자가 들어간 것인데, 이를 비우기 위해서 다음과 같은 코드를 작성할 수 있습니다.
# include <stdio.h>
int main() {
int c;
c = getchar();
printf("%c\n", c);
while (getchar() != '\n');//버퍼에 존재하는 문자 모두 제거
c = getchar();
printf("%c\n", c);
return 0;
}
결과는 다음과 같습니다.
(실행시키면 두번의 입력을 받을 수 있게 됩니다. 또한 다음과 같이 여러 문자를 입력해도 맨 처음 하나만 출력되고 이후 문자들은 버퍼에서 지워집니다.)
'c언어' 카테고리의 다른 글
[C언어] - 지역변수, 전역변수, static 변수 (0) | 2022.04.19 |
---|---|
[C언어] - 함수 (0) | 2022.04.19 |
[C언어] - 연산자, 형변환 (0) | 2022.04.19 |
[C언어] - 변수와 자료형 (0) | 2022.04.18 |
[C언어] - 입출력과 제어문자 (0) | 2022.04.18 |