我对fscanf和2D数组有点困难。

时间:2013-05-16 08:04:09

标签: c

所以我想说我必须在文中阅读

Bob 5 5 5

Sam 4 4 4

2 2 2乔

1 1 1拉里

为数字使用单独的2D数组,为名称使用其他数组。我该怎么做呢?

我考虑过至少使用第一种情况

char reading;
int test[MAX][LEN];//where max is some #define, does not matter 
while (i<MAX && reading = fgetc(foo) !=EOF ){
   if (j<LEN && reading != '\n){
      fscanf(foo, "%d", test[i][j]);//i'm really not sure. sorry :( 
      j++;
   }
   i++; 
}

你是否会在fscanf中使用%* c之类的东西,你如何检查新线? 我非常失去任何帮助,理解材料将不胜感激。

1 个答案:

答案 0 :(得分:0)

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


#define MAX 10
#define LEN 3

int main(void){
    int test[MAX][LEN]={0};
    char name[MAX][64];
    char linebuff[128];
    FILE *foo;
    int i,j,k;

    foo=fopen("data.txt", "r");

    for(i=0;i<MAX && NULL!=fgets(linebuff, sizeof(linebuff), foo);++i){
        char *p, *endp;
        j=0;
        for(p=linebuff;NULL!=(p=strtok(p, " \t\n"));p=NULL){
            int num;
            num=strtol(p, &endp, 10);
            if(*endp == '\0'){
                if(j<LEN)
                    test[i][j++]=num;
            } else {
                strcpy(name[i], p);//unnecessary?
            }
        }
    }
    fclose(foo);
    //check print
    for(j=0;j<i;++j){
        printf("%s ", name[j]);
        for(k=0;k<LEN;++k)
            printf("%d ", test[j][k]);
        printf("\n");
    }

    return 0;
}