0

以下のようなファイルがあります。

1 2 300 500 5 117 5 90 45 34 ---- -------------- 34566

7 8 16 8 39 167 80 90 38 4555

各数値を取得して 2 次元配列を格納するにはどうすればよいですか?

これまでのところ、fgets() 関数を使用して行を読み取ることができます。

FILE *fp = NULL;
char buffer[1024];
 fp = fopen("Input.txt","r"); 
if(fp!=NULL)
{
  while(fgets(buffer,1024,fp)!=NULL)
  {
    // i need help here

   } 
 }

fgets() を使用するのではなく、(これよりも優れた) 解決する別の方法はありますか?

4

3 に答える 3

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

int main(void){
    //Either the two-pass or ensure dynamically allocate and expand by `realloc` if size of the array can't be determined in advance, 

    static int array[20][20];
    int row=0;
    FILE *fp = NULL;
    char buffer[1024];
    fp = fopen("Input.txt","r"); 
    if(fp!=NULL) {
        while(fgets(buffer,1024,fp)!=NULL){
            char *p = buffer, *endp;
            long num;
            int col = 0;
            do{
                num = strtol(p, &endp, 10);
                if(*endp == ' ' || *endp == '\n' || *endp == '\0'){
                    array[row][col++] = num;
                }
                p = endp + 1;
            }while(*endp != '\n' && *endp != '\0');
            ++row;
        }
        fclose(fp);
    }
    return 0;
}
于 2013-07-23T09:15:01.687 に答える
1

それは次のようなものかもしれません:

int i = 0;
int num[20];
while (buffer[i] != '\0')
{
  int j = 0;
  char a[80];
  while (buffer[i] != ' ')
  {
    a[j] = buffer[i];
    ++j;
    ++i;
  }
  if (buffer[i] == '\0')
    break;
  a[j] = '\0';
  const char* b = &a[0];
  num[i] = strtol(b, NULL, 10);
  ++i;
}

...ここではメモリ管理が汚れていますが。取り組まなきゃ。

于 2013-07-23T07:30:43.533 に答える