Чтение ввода строки в массиве 2D C построчно - PullRequest
1 голос
/ 11 апреля 2020

Хорошо, во-первых, это то, что я собираюсь сделать. Это 12 столбцов и 15 строк, поэтому длина строки составляет 12

Enter the line 1 of the puzzle:XTZMQYKCECFH---->12 chars
Enter the line 2 of the puzzle:SHOUTEXOEAPI
Enter the line 3 of the puzzle:XGTLQBELTNFK
'
'
'
Enter the line 15 of the puzzle:

Итак, я перевожу ввод к другой забаве c, чтобы напечатать матрица и должна выглядеть следующим образом:

X T Z M Q Y K C E C F H
S H O U T E X O E A P I
X G T L Q B E L T N F K
'''
'''
'''

Итак, вот код, но я не думаю, что он будет работать с scanf, может быть, я должен использовать gets ()? Я думал о том, чтобы просто взять строку, сохранить ее в другом массиве и затем перенести в матрицу. Пожалуйста, постарайтесь не использовать никакую другую библиотеку, кроме stdio.h, потому что задача состоит в том, чтобы сделать это, не используя предустановленные строковые функции

#include <stdio.h>
#define COLUNM 12
#define ROW 15

void printPuzzle(char matrix[ROW][COLUNM]){
   int i,j;
   for (i=0;i<ROW;i++){
       for(j=0;j<COLUNM;j++){
           printf("\n");
           printf("%3c",matrix[i][j]);        }
   }

}
int main (){
   int i,j;
   j=0;
   char matrix[ROW][COLUNM];
       for(i = 1 ; i < COLUNM+1 ; i++){

           printf("Enter line %d of the puzzle :\n",i);

           scanf("%s",matrix[j][i]);
           j++;
       }
   printPuzzle(matrix[ROW][COLUNM]);
return 0;
}

Я также подумал об этом для основного удовольствия c:

int main (){
 int i,j;
 char line[COLUNM+1];

 char matrix[ROW][COLUNM];
     for(i = 0 ; i < ROW ; i++){

         printf("Enter line %d of the puzzle :\n",i+1);
         scanf("%s",line[i]);
         for(j=0;j<COLUNM;j++){
             matrix[i][j]=line[j];
         }



     }
 printPuzzle(matrix[ROW][COLUNM]);
return 0;
}

Но я продолжаю получать эти предупреждения 30 | printPuzzle (матрица [ROW] [COLUNM]); предупреждение: передача аргумента 1 в printPuzzle делает указатель из целого числа без приведения

. c: 5: 23: note: ожидаемое 'char (*) [12]', но аргумент имеет тип 'char '5 | void printPuzzle (символьная матрица [ROW] [COLUNM]) {

Не знаю много о c, может кто-нибудь объяснить простым языком Engli sh

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Вы должны использовать fgets, чтобы получить строку с клавиатуры. Затем напечатайте все символы каждой строки.

См. Код для получения строки:

   char matrix[ROW][COLUNM];
   for(i = 0 ; i < ROW ; i++){
        printf("Enter line %d of the puzzle :\n",i);
        fgets(matrix[i],COLUNM + 1, stdin);
        j++;
   }

Функция для печати всех символов:

void printPuzzle(char matrix[ROW][COLUNM]){
   int i,j;
   for (i=0;i<ROW;i++){
       for(j=0;j<strlen(matrix[i]);j++){
           printf("%3c",matrix[i][j]);
       }
       printf("\n");
   }
}

Полная код:

#include <stdio.h>
#include <string.h>
#define COLUNM 12
#define ROW 15

void printPuzzle(char matrix[ROW][COLUNM]){
   int i,j;
   for (i=0;i<ROW;i++){
       for(j=0;j<strlen(matrix[i]);j++){
           printf("%3c",matrix[i][j]);
       }
       printf("\n");
   }
}

int main (){
   int i,j;
   j=0;
   char matrix[ROW][COLUNM];
   for(i = 0 ; i < ROW ; i++){
        printf("Enter line %d of the puzzle :\n",i);
        fgets(matrix[i],COLUNM + 1, stdin);
        j++;
   }
   printPuzzle(matrix);
return 0;
}
1 голос
/ 11 апреля 2020

Я сделал некоторые изменения. Как мы только передаем имя массива в функцию и printf ("\ n"); будет во внешнем для l oop. Попробуйте этот код

  #include <stdio.h>
  #define COLUNM 12
  #define ROW 15

  void printPuzzle(char matrix[][COLUNM])
  {
   int i,j;
   for (i=0;i<ROW;i++)
   {
     for(j=0;j<COLUNM;j++)
      {

        printf("%3c",matrix[i][j]);
      }
      printf("\n");
   }

 }
 int main (){
  int i,j;
  j=0;
  char matrix[ROW][COLUNM];
  for(i = 0 ; i < COLUNM ; i++)
   {

       printf("Enter line %d of the puzzle :\n",i+1);

       scanf("%s",&matrix[j][i]);
       j++;
   }
  printPuzzle(matrix);
 return 0;
 }
...