728x90
7.8 단어 세기 예제
- 문장을 입력받으면 문장의 글자 수, 단어 수, 그리고 줄 수를 출력하는 프로그램을 작성하라. ' . '(마침표)로 입력의 끝을 표시한다
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
int main() {
char ch;
int cha = 0, word = 0, line = 0;
bool word_flag = false; // false : 새로운 단어가 시작하지 않았다
bool line_flag = false; // false : 새로운 줄이 시작하지 않았다
printf("Enter text : ");
while ((ch = getchar()) != '.') {
if (!isspace(ch)) {
cha++;
if (!word_flag) { // !word_flag == word_flag가 true가 아니라면 (false라면)
word++;
word_flag = true; // 새로운 단어가 시작됨을 표현
}
if (!line_flag) {
line++;
line_flag = true; // 새로운 줄이 시작됨을 표현
}
}
if (ch == '\n')
line_flag = false;
if (isspace(ch))
word_flag = false; // 지금까지 입력받던 단어가 입력이 끝났다
}
printf("Characters : %d, Words : %d, Lines : %d\n", cha, word, line);
return 0;
}
- 위 코드에선 새로운 단어와 줄의 입력을
- 첫 입력이 첫 줄이므로 line을 1 증가시키고 '\n'이 나타나기 전까지 라인 수를 세지 않기 위해 line_flag를 true로 바꿔놓음 (line 수를 세는 아래의 조건문에 들어가지 않기 위해)
if (!line_flag) { line++; line_flag = true; }
- '\n'이 입력되면 새로운 줄의 시작이므로 line_flag를 false로 바꿈
- 첫 입력이 첫 줄이므로 line을 1 증가시키고 '\n'이 나타나기 전까지 라인 수를 세지 않기 위해 line_flag를 true로 바꿔놓음 (line 수를 세는 아래의 조건문에 들어가지 않기 위해)
- isspace( ) = 인자로 받은 문자가 white space character인지 아닌지 판별. White space character가 아니면 0 반환
7.9 조건 연산자 (Conditional Operator)
(expression) ? statement1 : statement2
// expression이 참이면 statement1 실행, 거짓이면 statement2 실행
// ternary operator (3개의 피연산자)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
int main() {
int temp;
temp = true ? 1024 : 7;
printf("%d\n", temp);
temp = false ? 1024 : 7;
printf("%d\n", temp);
return 0;
}
Output :
1024
7
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
int main() {
int number;
scanf("%d", &number);
bool is_even = (number % 2 == 0) ? true : false;
if (is_even)
printf("Even\n");
else
printf("Ood\n");
return 0;
}
Output :
1) 5 입력
Ood
2) 6 입력
Even
(number % 2 == 0) ? printf("Even\n") : printf("Ood\n");
위처럼 한 줄으로도 조건에 따른 동작 설정이 가능하다
7.10 루프 도우미 continue와 break
#include <stdio.h>
int main() {
for (int i = 0; i < 10; i++) {
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
- continue문은 아래의 문장을 실행시키지 않고 조건문으로 다시 돌아감 (5는 출력하지 않음)
Output :
0 1 2 3 4 6 7 8 9
#include <stdio.h>
int main() {
for (int i = 0; i < 10; i++) {
if (i == 5)
break;
printf("%d ", i);
}
return 0;
}
- break문은 자신이 포함되어 있는 loop를 빠져나옴
Output :
0 1 2 3 4
#include <stdio.h>
int main() {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j == 5)
break;
printf("(%d %d)", i, j);
}
printf("\n");
}
return 0;
}
- break는 자기가 포함되어있는 단일 loop 하나만 빠져나옴
Output :
(0 0)(0 1)(0 2)(0 3)(0 4)
(1 0)(1 1)(1 2)(1 3)(1 4)
(2 0)(2 1)(2 2)(2 3)(2 4)
(3 0)(3 1)(3 2)(3 3)(3 4)
(4 0)(4 1)(4 2)(4 3)(4 4)
(5 0)(5 1)(5 2)(5 3)(5 4)
(6 0)(6 1)(6 2)(6 3)(6 4)
(7 0)(7 1)(7 2)(7 3)(7 4)
(8 0)(8 1)(8 2)(8 3)(8 4)
(9 0)(9 1)(9 2)(9 3)(9 4)
break문이 없을 때의 Output :
(0 0)(0 1)(0 2)(0 3)(0 4)(0 5)(0 6)(0 7)(0 8)(0 9)
(1 0)(1 1)(1 2)(1 3)(1 4)(1 5)(1 6)(1 7)(1 8)(1 9)
(2 0)(2 1)(2 2)(2 3)(2 4)(2 5)(2 6)(2 7)(2 8)(2 9)
(3 0)(3 1)(3 2)(3 3)(3 4)(3 5)(3 6)(3 7)(3 8)(3 9)
(4 0)(4 1)(4 2)(4 3)(4 4)(4 5)(4 6)(4 7)(4 8)(4 9)
(5 0)(5 1)(5 2)(5 3)(5 4)(5 5)(5 6)(5 7)(5 8)(5 9)
(6 0)(6 1)(6 2)(6 3)(6 4)(6 5)(6 6)(6 7)(6 8)(6 9)
(7 0)(7 1)(7 2)(7 3)(7 4)(7 5)(7 6)(7 7)(7 8)(7 9)
(8 0)(8 1)(8 2)(8 3)(8 4)(8 5)(8 6)(8 7)(8 8)(8 9)
(9 0)(9 1)(9 2)(9 3)(9 4)(9 5)(9 6)(9 7)(9 8)(9 9)
강의 출처 : https://www.inflearn.com/course/following-c/dashboard
'Study_C, C++ > 홍정모의 따라하며 배우는 C언어' 카테고리의 다른 글
[홍정모의 따라하며 배우는 C언어] 8.1 입출력 버퍼 ~ 8.3 입출력 방향 재지정 (0) | 2022.02.08 |
---|---|
[홍정모의 따라하며 배우는 C언어] 7.11 최대, 최소, 평균 구하기 예제 ~ 7.13 goto를 피하는 방법 (0) | 2022.02.05 |
[홍정모의 따라하며 배우는 C언어] 7.7 논리 연산자 Logical operators (0) | 2022.01.24 |
[홍정모의 따라하며 배우는 C언어] 7.5 else와 if 짝짓기 ~ 7.6 소수 판단 예제 (0) | 2021.12.31 |
[홍정모의 따라하며 배우는 C언어] 7.3 ctype.h 문자 함수들 ~ 7.4 다중 선택 else if (0) | 2021.12.25 |