C+ 배열 질문입니다. . .
#include <iostream>
using namespace std;
void prime(int n);
#define ROW 3
#define COL 4
void prime(int n){
int i,k,j;
int p[13];
j=0;
int c[3][4];
for(i=2; i<=n; i++)
{
for(k=2; k<n; k++)
{
if(i%k==0)
break;
}
if(i==k){
p[j] = i;
j++;
}
}
int q=0;
for(int i=0; i<ROW; i++)
{
for(int k=0; k<COL; k++)
{
c[i][k]=p[q];
cout<<c[i][k]<<" ";
q++;
}
cout<<endl;
}
}
int main(){
int n;
cin>>n;
prime(n);
}
이코드는 소수로채워진 2차원 배열입니다.
실행은 잘되는데 의문점이있어요.
13같은 작은값이나 100같은 높은값을 입력하면
작은값을입력했을땐 -45343543 같은 값처럼 깨져서 나오고
큰값을 입력했을땐 p쪽배열에 공간이없는지 에러가 뜨는거같은데.
제가 원하는건 수를 입력했을때 그수까지의 소수만 배열에 출력하고 그뒤에 깨지는걸 출력안하고싶은데
어떻게하면 되나요?
아래 링크에서 수정된 코드를 확인하실 수 있습니다.
https://repl.it/@hhan87/Aha-4020b909e40028ab8bc6cfcb3725f2b8?language=cpp&folderId=
언급하신 '-45343543 같은 값'은 쓰레기 값이라고 하여, 처음 배열을 생성할때 초기화를 해주지 않으면 들어가있는 값입니다.
우선 배열 p를 초기화 하셔서 모든 값을 0으로 만듭니다.
이후 prime을 구하면 배열이 소수로 채워질 텐데 0은 소수가 아니므로 배열의 값을 출력하실 때 제외하시면 됩니다.
위 프로그램의 경우 미리 어떤 숫자가 입력될지 알 수 없으므로 배열의 크기를 미리 알아서 생성하실 수는 없습니다.
따라서 값을 계속 넣을 수 있는 ArrayList같은 별도의 자료구조를 구현하여 활용하시는 것이 좋습니다.
아래 링크를 참조하시기 바랍니다.