C逐行创建多维数组

问题描述 投票:-1回答:1

我正在尝试获取下面的输入,并将其存储在多维数组中,并将最后一个数字存储在变量中。

  • 每行之后,将给出'\ n'字符。

  • 它将是字符数组。

  • 尺寸为[10] [10]。

输入:

1112231113
2112231113
1112231113
3312231113
1112231113
1112231113
3312231113
3312231113
3312231113
3312231113
1

我的代码:

int main(void) {
  char array[10][10];
  char in;

  scanf("%c", &in);
  while(in != '\n') {
    for(int i = 0; i < 10;i++){
      for(int j = 0;j < 10;j++){
        array[i][j] = in;

      }
    }
    scanf("%c", &in);
  }

  for(int i = 0; i < 10;i++){
      for(int j = 0;j < 10;j++){
        printf("%c", array[i][j]);
      }
      printf("\n");
  }

  return 0;


}
c arrays scanf
1个回答
-1
投票

在这种情况下,您应该使用Dimension is [10][12]代替Dimension is [10][10],因为每行包含10位数字,因此,如果要将数字存储在字符串行中,则应该为null字符花费1个字节的内存(\0)和\n字符的一个字节。

要逐行获取,可以使用fgetsgetline功能。

对于最后一个值,您可以使用sscanffscanfatoi等。>

适合您的小例子:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    char data[10][12];
    char line[12];
    FILE *fp = fopen("input.txt", "r");
    int i = 0;
    int var;
    while (fgets(line, sizeof(line), fp)) {
        if(strlen(line) > 1) {
            strcpy(data[i], line);
        } else if(strlen(line) == 2) { // for the value from `0` to `9`.
            var = atoi(line);
        }
        i++;
    }

    printf("var = %d\n", var);

    for(int k = 0; k < 10; k++) {
        printf("%s", data[k]);
    }

    return 0;
}

如果您确切知道文件中的行数,也可以使用for循环。

for(int i = 0; i < 10; i++) {
   fgets(data[i], 12, fp);
}
© www.soinside.com 2019 - 2024. All rights reserved.