/* wordcount.c
입력 자료에 대해 구분자(공백, 줄 바꿈, 탭)로 구별되는 단어별 개수를 알려준다.
*/
#include <stdio.h> // printf(), gets(), getc()
#include <string.h>// strcpy(), strcmp()
#include <stdlib.h>//malloc()
#define BLANK \' \'
#define NEW_LINE \'\\n\'
#define TAB \'\\t\'
#define WORD_MAX 10000
void main()
{
FILE *fp; //파일 포인터
char fileName[30]; // 파일명
char *words[WORD_MAX], tWord[30]; // 단어배열, 입력단어(임시보관)
int wordNum[WORD_MAX], nw, nc, c, k; // 단어별 개수, 단어 수, 문자 수 , 입력 문자 , 인덱스
enum {OUT, IN} wordSW; // OUT = 0, IN = 1
printf(" 입력 파일명을 입력하세요...? "); gets(fileName);
if ((fp = fopen(fileName, "r")) == NULL)
// 파일을 open하지 못하면
{
printf("%s을 열 수 없으므로 키보드(stdin)에서 문장을 입력하세요.\\n", fileName);
fp = stdin; // 파일 포인터를 표준 입력 장치(stdin)로 정한다.
}
for(k = 0; k < WORD_MAX; k++) wordNum[k] = 0;
// 단어 수 배열을 0으로 초기화한다.
nw = nc = 0; // 현재 워드 수와 문자 수 =0
do
{
c = getc(fp); // 파일 끝 문자 (0x1a = CTRL_z)가 읽히면 입력 문자 C가 EOF(-1) 가 된다.
if (c == BLANK || c == NEW_LINE || c == TAB || c == EOF) // 입력 문자가 구분자이면
{
if(nc > 0) // 입력 단어를 형성하는 문자가 1개라도 있으면
{
tWord[nc] = \'\\0\'; // 입력 단어 끝에 \'\\0\'을 넣어 문자열로 만든다.
wordSW = OUT; // 입력 단어가 단어 배열에 없는 것으로 지정한다.
for(k = 0; k <nw; k++)
if(strcmp(words[k], tWord) == 0) // 입력 단어가 단어 배열에 있으면
{
words[nw] = (char *)malloc(nc); strcpy(words[nw], tWord);
wordNum[nw] = 1; // 추가 단어의 수 = 1,
nw++; // 단어 배열의 단어 수 1 증가
}
nc = 0; // 입력 단어를 형성할 문자 수 =0
}
}
else
tWord[nc++] = c; // 입력 단어로 입력 문자를 넣고 입력 문자 개수 1증가
} while (c != EOF); // 입력 문자c가 EOF(-1) 가 아닌 동안 앞 블록을 수행한다.
fclose(fp);
for(k = 0; k < nw; k++)
printf("%30s[%3d]:%3d\\n", words[k], k, wordNum[k]);
}
빌드하니깐
이렇게뜨고
한번 컨트롤 f5 눌러해봤는데.
1>------ 빌드 시작: 프로젝트: C언어 공부할꼬양, 구성: Debug Win32 ------
1> wordcount!.c
1>d:\\새 폴더\\c언어 공부할꼬양\\c언어 공부할꼬양\\wordcount!.c(22): warning C4996: \'gets\': This function or variable may be unsafe. Consider using gets_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\\c\\vc\\include\\stdio.h(277) : \'gets\' 선언을 참조하십시오.
1>d:\\새 폴더\\c언어 공부할꼬양\\c언어 공부할꼬양\\wordcount!.c(23): warning C4996: \'fopen\': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\\c\\vc\\include\\stdio.h(234) : \'fopen\' 선언을 참조하십시오.
1>d:\\새 폴더\\c언어 공부할꼬양\\c언어 공부할꼬양\\wordcount!.c(44): warning C4996: \'strcpy\': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\\c\\vc\\include\\string.h(105) : \'strcpy\' 선언을 참조하십시오.
========== 빌드: 성공 1, 실패 0, 최신 0, 생략 0 ==========
1>------ 빌드 시작: 프로젝트: C언어 공부할꼬양, 구성: Debug Win32 ------
1>LINK : fatal error LNK1168: D:\\새 폴더\\C언어 공부할꼬양\\Debug\\C언어 공부할꼬양.exe을(를) 쓰기용으로 열 수 없습니다.
========== 빌드: 성공 0, 실패 1, 최신 0, 생략 0 ==========
이렇게뜨네..
힝 ㅠㅠㅠㅠ
왜안되는거양?
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.