1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <time.h>
4 #define MAX_SIZE 500
5 #define MAX_LENGTH 120
6
7
8 int main() {
9 //struct student *ptr;
10 char *str_list[MAX_LENGTH];
11 int n, i ,size ,ch;
12 int *ptr = NULL;
13 srand((unsigned int)time(NULL));
14
15
16 //for (n = 0; n < MAX_SIZE; n++) {
17
18 for( i = 0; i < MAX_LENGTH; i++) {
19
20 str_list[i] = ('A' + rand() &); //아스키코드 개념을 이용해서 랜덤 문자열 생성해서
21 }
22 //}
23
24 str_list[i] = 0; // null
25
26 printf("size?");
27 scanf("%d", &size); //원하는 숫자 입력받고
28
29
30 //ptr = (int *)malloc(n * sizeof(size));
31
32 //printf("%d student id and name input pleade~\n",n);
33 //for (i = 0; i < n; i++)
34 // scanf("%d %s \n", &ptr[i].id, ptr[i].name);
35
36 printf("\n* random print!! *\n");
37 for(int k = 0; k < size; k++) //처음부터 원하는 숫자까지 출력하는건데..
38 printf(" %s\n",str_list[k]); //문자열을 출력하고싶은데 자꾸 %d를 넣으라고 해서
39
40 printf("\n");
41
42 return 0;
43 }
~
# 변수값 넣는 부분에 강제 형변환도 해보고 ㅐㅆ는데 안됩니다 ......어떻게 해야 할까요?
20번째줄 rand() 오타부분 무시해주세욤..
퍼센트26인가보네 20번째줄ㅋㅋ - dc Cpp
안타깝게도 'A' ~ 'Z' 는 char형에 들어가야하는데 str_list[i]는 char*형이네.ㅋㅋ - dc Cpp
리눅스 gcc컴파에서 바꾸라해서요 char로 하면 오류뜨면서 char*로 바꾸라고 오류나와요
총체적 난국이다
왜요,,,,
rand()는 int를 리턴한단다
제가 그 생각도해서요 (char)('A' + rand() ~~~~) 해도 안됬어요 혹시 랜드앞에 해야하나 해도 역시 안됬어요 다른 방식으로 바꿔야 하나요
itoa아니면 sprintf 써서 변환..
sprintf(str , "%s" , 'str_list[i]') 이런식으로 했느데 %d로 바꾸라는 똩같은 오류가 나와요 Str은 새로 선언한 문자열 배열 입니다
아니 이 바부탱아 그렇게 한줄로 되는게 아니라 1. rand()를 char*로 바꾼다 2. 그걸 'A'랑 합친다 3. 이제 그걸 str_list[i]에 넣는다.
니가 만들고 싶은 문자열이 Axxxxxx 맞지?
s = str_list[ch]; sprintf(str1 , "%c", s); printf("%s\n",str1); 이렇게 해서 됬는데여.. %c는되고 %s는 안되죠...?
아뇨 제가만드는건 처음부터 원하는 숫자만큼 랜덤하게 문자출력 숫자만큼이요 ㅎㅎ....
아니 그니까 Axxxxx에서 xxxxx가 랜덤한 숫자로 채워주는거 아니야? 그리고 둘다 틀렷어 %d로 해야돼
아니 그리고 s = str_list[ch]; 가 어케나왔는데
아 s는 char s; 고요 str_list[ch] => str_list[i] 라고 생각하심 되요
그.. 그니까 이거 전에 str_list[ch] 에는 뭐가 들어가있는데
str_list[i] = ('A' + rand() &); 입니다!!
rand() 뒤에 &이건 뭔데 내가 모르는 문법이냐?
rand 그거 오타입니다 & 아시겠지만 이걸 오타친거 입니다.
어? 디시에서 나누기 26이 안써지네여
아 ㅇㅋ 뭔말인지 알게
뭔말인지는 알겠다. 시발 개떡같이 적어놨는데 저 위에 답글단 17번은 찰떡같이 알아들엇네
랜덤한문자 출력이요! 5 치면 a e h e j 이런식으로 출력이요
오우쉣 그니까 지금 이거 문자열 아니고 그냥 랜덤한 한자리 ascii 문자면 되는거야?
그 니가 처음 짠 코드랑 니가 지금 설명하고 있는거랑 괴리가 좀 심한거 같아서 혼란이 온다 주어진 문제 자체가 뭔데
숫자 입력하면 랜덤한 문자 출력하면되요,.....
일당 몇개의 랜덤문자열을 생성하고요 5치면 그 문자열중 5개의 문자만 출력입니다!!
야 담부터 질문 올릴때 코드만 올리지 말고 원래 의도를 올려랴 알겟냐 처음 문자열 선언때문에 니가 짠 코드는 완전 다른쪽으로 해석됐음 처음 선언할 때 * 빼버리고 char str_list[MAX_LENGTH] 나중에 print 할때 %c 로 찍어주면 됨
적어도 니가 말한 5치면 a e h e j는 이렇게 하면 해결됨
넹 감사합니다.. 근데 혹시 머가 헷갈리게 했는지 알려주실 수?????
char *str_list[MAX_LENGTH]; 이부분 때문에 가장 헷갈렸지. *str_list[MAX_LENGTH] 해버리면 나는 자연스럽게 너가 "문자열"을 만들겠구나 라고 가정을 하고 A + rand()할때 길다란 문자열을 만들겠거니 가정을 한거야. 대신 char str_list[MAX_LENGTH];를 해버리면 아 너가 그냥 문자를 만들고 싶구나 라고 가정을 하는거지. 그래서 니가 오타낸 & 도 자연스레 퍼센트 26으로 해석돼서 랜덤한 알파벳 문자를 만들겠네 라고 해석됨.
참고로 내가 말한 sprintf 랑 여기서 쓴 방법의차이점도 잘 알아놔 만약 정수 i가 67 라고 치면 sprintf를 통해서 i를 변환한 문자열은 "67"가 되고 (char*) 여기서 쓴 방법 (단순히 캐스팅) 한거는 'C' 가 나옴. (char) 그니까 내가 처음에 설명하려고 했던 방법은 "A67"이라는 문자열을 만드는 법이였다.
네 감사합니다