이제 갓 시작해서 이것저것 해보고 있는 학생입니다 :)
최근에, 포인터랑 이것저것 배워서 그거 예제를 풀어보고 있는데요, 기초적인 부분(?)에서 막힌것 같아 질문드립니다...
만들어야하는 소스의 문제조건입니다.
1. 난수 발생 함수 (rand)를 사용하여 5~ 15자의 문자로 된 단어 (문자열)을 형성합니다.
이 '단어'는 문자열 배열 내에 저장하며, 함수를 통해 생성합니다.
3. 1줄에 최대 10개 단어까지 출력후 줄바꿈을 하는 출력 함수를 만듭니다.
출력되는 각 문자들은 15칸의 공간에 좌측정렬이 되도록 합니다.
(실제론 좀더 다양한 조건이 있습니다만, 가장 핵심적인 부분을 추렸습니다.)
현재까지 만든 코드는
15개의 단어를 화면에 출력하며, 단어 10개를 출력 후 줄바꿈을 하여 나머지 5개의 단어를 출력하는 함수입니다.
#define 부분에서 숫자 확인해주세요
[문제점1]
하지만, 현재의 코드는 COUNT를 COLUMN보다 크게 할때마다 출력이 되지 않습니다.
따라서 하단의 예시 코드도 COLUMN이 COUNT보다 클때만 출력이 됩니다.
[문제점2]
또한, COLUMN >COUNT 일 경우에도
genWord에서 아스키코드를 통해 설정한 값과 달리 모든 문자가 대문자로 형성됩니다.
가끔, 소문자가 나올 경우엔 abc의 알파벳의 순서로만 나오며
이때엔 항상 특수문자까지 나옵니다.....
여기 예시 코드입니다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#define COUNT 15 //표시할 단어의 수
#define COLUMN 10 //한줄에 표시할 문자열의 수
#define ROW 15 //문자열의 길이
void genWord(char *word, int length);
void printWords(char *word, int count);
int main(void)
{
int length, act;
int count = 1; //출력된 문자열 카운트
srand((unsigned int)time(NULL));
//동적 메모리 할당//
char **arr;
arr = (char **)malloc(sizeof(char *)*COLUMN);
arr[0] = (char *)malloc(sizeof(char)*COLUMN*ROW);
for (act = 1; act < COLUMN; act++)
{
arr[act] = arr[act - 1] + ROW;
}
//글자 수 랜덤화 및 2차원 배열에 저장//
act = 0;
do
{
length = rand() % 11 + 5;
genWord(arr[act], length);
act ++;
} while (act < COUNT);
//문자열 출력//
act = 0;
do
{
count = 1;
printWords(arr[act], count);
act ++;
count++;
} while (act < COUNT);
printf("\n");
return 0;
}
void genWord(char *word, int length)
{
int act;
*word = rand() % 26 + 65;
for (act = 1; act < length; act++)
{
*(word + act) = rand() % 26 + 97;
}
for (act = length; act <= 15; act++)
{
*(word + act) = ' ';
}
}
void printWords(char *word, int count)
{
int act;
for (act = 0; act < ROW; act++)
{
printf("%c", *word + act);
}
printf("\t");
if (count % COUNT == 0)
printf("\n");
}
|
cs |
아 그리고
오 오랜만에 보는 깔끔한 질문글이다... 건승하시길 바랍니다.
여기엔 지금 빠져있는데 main 함수 끝자락에 free(arr); free(arr[0]); 을 써 넣었답니다!
ㅊㄹ// 감사합니다 ㅠ
근데 문자열 끝에 NULL터미네티어 넣었닝?
ㅁ, ㅇㅇ// 감사합니다. 일단 그렇게 해볼게요! null값을 안넣은게 문제가 된것 같아요 우선 이거 추가해보겠습니다! 정말 감사합니다!