파일을 읽어서 그 파일 속에 각각의 숫자, 빈칸, 그 외의 문자들은 몇 개인지를 세는 프로그램을 작성한다. (0~9까지의 숫자는 배열로 처리)
예를 들어 숫자 '3'이 입력되면 c의 실제값은 숫자 3이 아니라 문자'3'의 값이 입력된 것이다.
원하는 숫자를 처리하기 위해서는 c에서 '0'을 빼주면 배열에 올바른 숫자가 할당될 것이다.
#include <stdio.h>
/* count digits, white space, others */
main()
{
// 각 변수 초기화
int c, i, nwhite, nother;
int ndigit[ 10 ];
nwhite = nother = 0;
for( i = 0; i < 10; i++ )
ndigit[ i ] = 0;
// 입력문자 구분
while( ( c = getchar() ) != EOF )
if( c >= '0' && c <= '9' )
++ndigit[ c - '0' ];
else if( c == ' ' || c == '\n' || c == '\t' )
++nwhite;
else
++nother;
// 출력
printf( "digits =" );
for( i = 0; i < 10; ++i )
printf( "%d ", ndigit[ i ] );
printf( ", white space = %d, other = %d\n", nwhite, nother );
}
/* count digits, white space, others */
main()
{
// 각 변수 초기화
int c, i, nwhite, nother;
int ndigit[ 10 ];
nwhite = nother = 0;
for( i = 0; i < 10; i++ )
ndigit[ i ] = 0;
// 입력문자 구분
while( ( c = getchar() ) != EOF )
if( c >= '0' && c <= '9' )
++ndigit[ c - '0' ];
else if( c == ' ' || c == '\n' || c == '\t' )
++nwhite;
else
++nother;
// 출력
printf( "digits =" );
for( i = 0; i < 10; ++i )
printf( "%d ", ndigit[ i ] );
printf( ", white space = %d, other = %d\n", nwhite, nother );
}
- 문자를 입력받을 때마다 숫자인지 빈칸인지 그 외의 문자인지 체크를 한다.
- 숫자가 입력되면 해당 ndigit[i] 배열 값이 1씩 증가한다.
- 빈칸, tab, 행바꿈문자가 나오면 빈칸 변수인 nwhite가 1씩 증가한다.
- 그 외의 문자들이 입력되면 nother이 1씩 증가한다.
if( c >= '0' && c <= '9' )
++ndigit[ c - '0' ];
++ndigit[ c - '0' ];
예를 들어 숫자 '3'이 입력되면 c의 실제값은 숫자 3이 아니라 문자'3'의 값이 입력된 것이다.
원하는 숫자를 처리하기 위해서는 c에서 '0'을 빼주면 배열에 올바른 숫자가 할당될 것이다.
- 문자'3'의 ASCII 값은 51
- 문자'0'의 ACSII 값은 48
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.
,