2017-11-30 8 views
0
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 
#define N 10 
#define TEMPSIZE 1024 

int DiagSum(int **p, int sizearray) { 
    int sum=0; 
    for (int i = 0; i < sizearray; i++) { 
     for (int j = 0; j < sizearray; j++) { 
      if (j == i) { 
       sum = sum + p[i][j]; 
      } 
     } 
    } 
    return sum; 
} 

int SizeArray(int **p) { 
    int i; 
    for (i = 0; i < TEMPSIZE; i++) { 
     if (p[i] == ' ' || p[i]=='\t') 
      i++; 
    } 
    return p[i]; 
} 
void main() { 
    int **p; 
    int input; 
    int sizear=0; 
    int i, j, counter = 0; 

    p = (int**)malloc(N * sizeof(int*)); 
    for (j = 0; j < N; j++) 
     p[j] = (int*)malloc(N * sizeof(int)); 
    while ((input = getchar()) != EOF || input != '\n') { 
     if (input == ' ' || input == '\t') 
      continue; 
     input = input - '0'; 
     sizear = SizeArray(p); 
     for (i = 0; i < sizear; i++) 
     { 
      for (j = 0; j < sizear; j++) 
      { 
       p[i][j] = input - '0'; 
       counter++; 
      } 
     } 
    if (counter > sizear*sizear) { 
     printf("you've entered too many numbers \n"); 
    } 
    else if (counter < sizear*sizear) { 
     printf("you've entered not enough numbers \n"); 
    } 
    for (i = 0; i < sizear; i++) 
    { 
     for (j = 0; j < sizear; j++) 
     { 
      printf("%c ", p[i][j]); 
     } 
    } 
} 

완전히 고정되었습니다. 내 임무는 사용자에게 한 줄만 입력하도록 요청합니다. 행렬의 크기 (n * n)로 구성되며 그 행의 첫 번째 숫자와 숫자가됩니다. 예 : 3 1 2 3 4 5 6 7 8 9. 3 (첫 번째 숫자) - 행과 열 다음에 오는 숫자는 행렬 안의 숫자입니다. 첫 번째 실수는 가장 중요한 것이 배열 크기가 될 첫 번째 숫자를 추출 할 수 없다는 것입니다. 두 번째는 아마 매트릭스에 잘못된 입력입니다. 어떻게 수정해야합니까?사용자로부터 2 차원 배열로 입력 받기

+0

왜 정적 크기 ('N')를 사용하는 경우 동적 할당을 사용합니까? – Stargateur

+0

@Stargateur 그건 강사의 추천입니다. N은 배열의 최대 크기를 나타내는 임시 번호입니다. – Nadia

+0

'SizeArray'는'p [i] == '''를 검사합니다.'p'는 정수의 2 차원 배열입니다. 'p [i]'는'char'와 비교 될 수 없습니다 –

답변

-1
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 
#define TEMPSIZE 1024 

int DiagSum(int **p, int sizearray) { 
    int sum=0; 
    for (int i = 0; i < sizearray; i++) { 
     for (int j = 0; j < sizearray; j++) { 
      if (j == i) { 
       sum = sum + p[i][j]; 
      } 
     } 
    } 
    return sum; 
} 

void main() { 
    int **p; 
    char input[TEMPSIZE] = {0}; 
    int sizear=0; 
    int i, j, counter = 0; 

    //get input string(size no more than 1024) 
    fgets(input, TEMPSIZE, stdin); 

    //get array size 
    char* str = strstr(input, " "); 
    if(str == 0) 
    return; 
    str[0] = 0; 
    str++; 
    sizear = atoi(input); 

    if(sizear <= 0) 
    return; 

    //create array 
    p = (int**)calloc(sizear, sizeof(int*)); 
    for (j = 0; j < sizear; j++) 
    { 
     p[j] = (int*)calloc(sizear, sizeof(int)); 
    } 

    //fill array with input 
    for (i = 0; i < sizear; i++) 
    { 
     for (j = 0; j < sizear; j++) 
     { 
      char* temp = strstr(str, " "); 
      if(temp == 0) 
      { 
       p[i][j] = atoi(str); 
       counter++; 
       goto end; 
      } 
      temp[0] = 0; 
      p[i][j] = atoi(str); 
      str = temp + 1; 
      counter++; 
     } 
    } 

end: 
    if (counter > sizear*sizear) { 
     printf("you've entered too many numbers \n"); 
    } 
    else if (counter < sizear*sizear) { 
     printf("you've entered not enough numbers \n"); 
    } 
    for (i = 0; i < sizear; i++) 
    { 
     for (j = 0; j < sizear; j++) 
     { 
      printf("%d ", p[i][j]); 
     } 
    } 

    //free memory 
    for (j = 0; j < sizear; j++) 
    { 
     free(p[j]); 
    } 
    free(p); 
} 

나는 위의 코드가 도움이된다고 생각합니다!

+0

감사! 넌 나를 구했다! – Nadia

+0

'malloc' +'memset' 대신'calloc'을 사용하십시오. 'malloc'의 반환 값을 캐스팅하지 마십시오. C 표준에는'gets'가 없습니다 !!! –

+0

@AnttiHaapala 지적 해 주셔서 감사합니다. – BrianChen