2017-11-30 11 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]); 
     } 
    } 
} 

完全にスタックされています。私の割り当てでは、ユーザーからの入力を1行にするように求められます。それは行列のサイズ(n * n)で構成され、それはその行の最初の数字とその中の数字になります。例:3 1 2 3 4 5 6 7 8 9. 3(最初の数字) - 行と列の後に続く数字は、マトリックス内の数字になります。最初の間違いがあり、最も重要なことは、配列のサイズとなる最初の数字を抽出できないことです.2番目は恐らく行列への入力が悪いでしょう。どのように修正する必要がありますか?2d配列でユーザからの入力を受け取ります

+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の標準には「取得」はありません! –

+0

@AnttiHaapalaそれを指摘していただきありがとうございます。 – BrianChen