2017-11-29 11 views
-2

나는 사용자가 입력과 함께 매트릭스의 크기를 알려주는 동적 2 차원 행렬을 만들려고 노력하고있다. 예 : 3 1 2 3 4 5 6 7 8 9, 여기서 첫 번째 int 3은 행렬의 크기 (3 * 3)이고 나머지 숫자는 행렬에 입력하려는 숫자입니다. 아이디어가 있나요?입력과 함께 한 줄로 배열의 크기를 얻는 것

+0

확실하게 명령 줄 인수를 사용하거나 프로그램 시작 후 사용자 입력을 허용 할 수 있습니다. 하지만 "2d"를 원한다면 사용자가 너비와 높이를 입력해야하지 않을까요? 일부 시스템에서는 명령 줄 인수의 수를 제한 할 것이라고 생각하지만 (누군가는 알 수 있습니다) 프로그램 시작 후 사용자 입력을 읽고 자신을 구문 분석하는 것이 좋습니다. – yano

+0

'malloc'에 관해 읽는 것 –

+0

나의 나쁜. 문제가 해결되었습니다. 나는 그 숫자의 나머지 부분이 입력 인 n * n 행렬을 줄 3을 얻는 것을 의미한다. – Nadia

답변

0

귀하가 찾고 계신 것입니다. 코드는 코드의 주석에 설명되어 있습니다.

here을 읽고 c에 동적 2d 배열을 만드는 방법.

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
    int n; 

    scanf("%d", &n); 

    /* It will allocate an array of pointers with n elements*/ 
    int **arr = (int**)malloc(n*sizeof(int*)); 

    /* each element in the above array would contain another array that makes the upper array as the 2D array */ 
    for (int i = 0; i < n; i++) 
     arr[i] = (int*)malloc(n * sizeof(int)); 

    /*It is taking the input to put inside the array */ 
    for (int i = 0; i < n; i++) 
     for (int j = 0; j < n; j++) 
      scanf("%d", &arr[i][j]); 

    /* This is printing the content inside the array */ 
    for (int i = 0; i < n; i++) 
     for (int j = 0; j < n; j++) 
      printf("%d\t", arr[i][j]); 

    return 0; 

} 
1

"동적"바로 2D 매트릭스의 크기가 런타임에 정의되어 있음을 의미한다면, 당신은 가변 길이 배열을 사용할 수 있습니다. 이들은 함수 범위에서 생성되며 n x n 연속적으로 저장된 정수가 array[x][y]과 같이 액세스 할 수 있다는 점에서 "실제"2D 배열입니다. 이 방법을 설명하기에 다음 코드를 참조하십시오 :

int main() { 

    int n; 
    if (scanf("%d", &n) != 1 || n <= 0) { 
     printf("invalid input."); 
     return 1; 
    } 

    int array[n][n]; // variable length array 
    for (int i = 0; i < n; i++) { 
     for (int j = 0; j < n; j++) { 
      if (scanf("%d", &array[i][j]) != 1) { 
       printf("invalid input."); 
       return 1; 
      } 
     } 
    } 

    // matrix is available in main... 
    return 0; 
} 

"동적"이라 함은, 그러나, malloc를 사용하여 동적으로 할당 된 경우에, 당신은 모두 "진짜"2 차원 배열을 선도하지,이 기회가 :

첫째, (동적으로) 포인터 배열을 생성합니다. 각 항목은 (동적으로) 할당 된 int 배열을 가리 킵니다. 이점 : arr[x][y]처럼 액세스 할 수 있습니다. 단점 : 행은 대등하게 저장되지 않지만 메모리에 확산됩니다 (아마).

두 번째로 (동적으로) 크기가 int 인 배열 n * n을 만듭니다. 장점 : 값은 메모리의 동시 블록에 저장됩니다. 단점 : arr[x][y]처럼 액세스 할 수 없으며 직접 셀 위치를 계산해야합니다 (예 : arr[y * n + x]).

+0

라인'int array [n] [n]; // variable length array'는 Visual Studio 2017 커뮤니티 에디션에서 에러를 발생시킵니다. ** 표현식이 상수로 평가되지 않았습니다 **. 그것은 배열 선언이 상수이기를 기대하고 변수를 제공하기 때문일 수 있습니다. – Siraj

+0

https : // stackoverflow.com/a/19920531/5132337 동적 인 2 차원 배열 – Siraj

+0

@Siraj의 생성을 더 잘 설명합니다. 사용 된 컴파일러가 C99 또는 C11의 선택적 기능을 지원하지 않기 때문에 "표현식이 상수로 평가되지 않았습니다"라는 오류 메시지가 표시됩니다. (컴파일러는 C++ 또는 C 컴파일러를 사용 했습니까?) – chux