2017-04-24 116 views
-3

enter image description here读取线和存储到阵列

林试图读取与在上述格式输入的文本文件。林能看懂每一行与此代码:

FILE *file = fopen(argv[1], "r"); 
... 

char * line = NULL; 
size_t len = 0; 
ssize_t read; 
while ((read = getline(&line, &len, file)) != -1) 

使“线”是等于文件,如果我输出的每个线时所读的例如:我得到的第一输出为“1 2 3 4 5 6 7 8 9“。我如何将这些数字存储到2d数组中?我怎样才能在每个空间拆分并获得数字?

+1

样品输入总是9x9的数? – BLUEPIXY

+0

@BLUEPIXY是的,永远。它是一个9x9。 –

+0

在这种情况下,使用[sscanf]似乎很容易(http://en.cppreference.com/w/c/io/fscanf)。 – BLUEPIXY

回答

0

使用sscanf

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

int main (int argc, char *argv[]) { 
    int numbers[9][9]; 
    FILE *file = fopen(argv[1], "r"); 
    char * line = NULL; 
    size_t len = 0; 
    ssize_t read; 
    int rows = 0; 
    while ((read = getline(&line, &len, file)) != -1){ 
     int *a = numbers[rows]; 
     if(9 != sscanf(line, "%d%d%d%d%d%d%d%d%d", a, a+1, a+2,a+3,a+4,a+5,a+6,a+7,a+8)){ 
      fprintf(stderr, "%s invalid format at input file\n", line); 
      return EXIT_FAILURE; 
     } 
     if(++rows == 9) 
      break; 
    } 
    fclose(file); 
    free(line); 
    //check print 
    for(int r = 0; r < 9; ++r){ 
     for(int c = 0; c < 9; ++c) 
      printf("%d ", numbers[r][c]); 
     puts(""); 
    } 
} 
+0

谢谢你的工作正常。 –

0

字符串是一个数组,因此您只是想将字符串的内容逐个字符复制到另一个数组,除非字符不是字母数字。 您可以先检查一下当前字符串中有多少个字母数字字符,然后为新数组获取这些内存量。