逐行读取2D C数组中的字符串输入

逐行读取2D C数组中的字符串输入,c,arrays,string,matrix,input,C,Arrays,String,Matrix,Input,好的,首先我要说的是,有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: 那么,ı将输入带到另一个func来打印矩阵,应该是这样的: X T

好的,首先我要说的是,有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:
那么,ı将输入带到另一个func来打印矩阵,应该是这样的:

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一起工作,也许ı应该使用get()? 我想把这条线存储在另一个数组中,然后传输到矩阵中。 请尽量不要使用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;
}
#包括
#定义COLUNM 12
#定义第15行
void printPuzzle(字符矩阵[行][COLUNM]){
int i,j;

对于(i=0;i我做了一些更改。就像我们只在函数中传递数组的名称一样,printf(“\n”);将在外部for循环中。请尝试此代码

  #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;
 }
#包括
#定义COLUNM 12
#定义第15行
void printPuzzle(字符矩阵[][COLUNM])
{
int i,j;

对于(i=0;i您应该使用
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++;
   }
char矩阵[ROW][COLUNM];
对于(i=0;i
用于打印所有字符的功能:

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

void printPuzzle(字符矩阵[ROW][COLUNM]){
int i,j;

对于(i=0;在任何情况下都使用
gets()
,因为出于安全原因,该函数已从ISO C标准中正式删除。请改用
fgets()
。在问题下方可以看到灰色的“编辑”链接,这是您可以使用新代码更新问题的链接。函数
printPuzzle
的参数类型为
char[15][12]
,它与类型
char(*)[12]
当用作函数参数时。这意味着您必须传递指向整个数组的指针。但是,您正在使用表达式
矩阵[ROW][COLUNM]
调用函数,预处理器将其更改为
矩阵[15][12]
。这意味着您正在传递单个元素的值。此元素甚至不存在,因为您正在访问数组。请尝试传递
矩阵
。@AndreasWenzel好的,我理解。感谢您以如此简单的方式解释。非常感谢,这就是我想要的。您测试了它吗?
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;
}