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

VOLLSTÄNDIG festgeklebt. Meine Aufgabe fordert mich auf, nur eine Zeile vom Benutzer einzugeben. Es besteht aus der Größe der Matrix (n * n) und das wäre die erste Zahl in dieser Zeile und die Zahlen, die darin enthalten sind. zum Beispiel: 3 1 2 3 4 5 6 7 8 9. 3 (erste Zahl) - Zeilen und Spalten, die folgenden Zahlen sind die Zahlen innerhalb der Matrix. Erster Fehler und am wichtigsten ist es nicht in der Lage zu sein, diese erste Zahl zu extrahieren, die die Array-Größe wäre, zweitens ist es wahrscheinlich die schlechte Eingabe in die Matrix. Wie soll ich es beheben?Eingabe vom Benutzer im 2D-Array erhalten

+0

Warum verwenden Sie dynamische Zuordnung, wenn Sie statische Größe ('N') verwenden? – Stargateur

+0

@Stargateur Das war unsere Instructor Empfehlung. N ist nur eine temporäre Zahl, die die maximale Größe des Arrays angibt. – Nadia

+0

'SizeArray' überprüft' p [i] == '' 'wobei' p' ein zweidimensionales Array von ganzen Zahlen ist. 'p [i]' kann nicht mit 'char' verglichen werden –

Antwort

-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); 
} 

Ich denke oben Code wird Ihnen helfen!

+0

Danke! Du hast mich gerettet! – Nadia

+0

Verwenden Sie "Calloc" anstelle von "Malloc" + "Memset". Übergeben Sie den Rückgabewert von "malloc" nicht. Es gibt kein "bekommt" im C-Standard !!! –

+0

@AnttiHaapala Danke, dass Sie darauf hingewiesen haben. – BrianChen

Verwandte Themen