【问题标题】:Reading string input in 2D C array line by line逐行读取二维 C 数组中的字符串输入
【发布时间】:2020-07-24 03:48:47
【问题描述】:

好吧,我首先要做的是。有 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:

然后我把输入带到另一个函数来打印矩阵,应该是这样的:

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

我也为主要功能考虑了这一点:

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(矩阵[行][列]); 警告:传递“printPuzzle”的参数 1 使指针从整数而不进行强制转换

.c:5:23:注意:预期为“char (*)[12]”,但参数的类型为“char” 5 | void printPuzzle(char matrix[ROW][COLUM]){

对c不太了解,谁能用简单的英文解释一下

【问题讨论】:

  • 永远不要使用gets(),因为出于安全原因,该功能已从 ISO C 标准中正式删除。请改用fgets()
  • 在问题下方,您可以看到一个灰色的“编辑”链接,您可以使用该链接使用新代码更新问题。
  • 函数printPuzzle的参数类型为char[15][12],当用作函数参数时,decayschar(*)[12]类型。这意味着您必须将指针传递给整个数组。但是,您使用表达式matrix[ROW][COLUNM] 调用函数,预处理器将其更改为matrix[15][12]。这意味着您正在传递单个元素的值。该元素甚至不存在,因为您正在越界访问数组。尝试改为传递matrix
  • @AndreasWenzel 好的,我明白了。谢谢你用这么简单的方式解释

标签: c arrays string matrix input


【解决方案1】:

我做了一些改变。就像我们只在函数中传递数组的名称和 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;
 }

【讨论】:

  • 非常感谢,这正是我想要的
  • 你测试了吗?
【解决方案2】:

您应该使用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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 2013-01-10
    • 2015-05-17
    • 2016-10-19
    • 1970-01-01
    相关资源
    最近更新 更多