0

私のテキストファイルは次のとおりです。

Random Words //これは上部に 1 回だけ表示されます

職業1

1 2 3 4 5

6 7 8 9 10

職業2

11 12 13 14 15

16 17 18 19 20

入力に問題があり、私のコードを見ていただけないでしょうか。

typedef struct foo
{
    char occupation[256]; 
    int numbers[limita][limitb];
}FOO;

void function(FOO input[]);

int main()
{
    FOO input[limit];
    function(input);
    return 0;
}

void function(FOO input[])
{
    FILE* file;
    file = fopen("textfile.txt","r");
    int a=0; int b =0; 
    char temp[81];
    char randomwords[81];

    while(fgets(temp,sizeof(temp)-1,file))
    {
        sscanf(temp, "%[^\n] %[^\n] %d", randomwords,&input[a].occupation[a], &input[a].numbers[a][b]);
        a++;
    }
}

そこで、ランダムな単語と職業を(printfで)印刷しようとしましたが、役に立ちませんでした。2D配列である必要があり、列を変更していないように見えるため、数字をまったく正しく使用しているとは思いません。

正しい方向への一歩/助けをいただければ幸いです。簡単に説明してください。どうもありがとうございました。

編集:technomageは、私が何をしているのか、何を望んでいるのかについて興味深い点を提起しました. 彼が提案したことを反映して変更する方法がわかりません。

4

1 に答える 1

0

あなたはおそらくこのようなことをしたいでしょう。この実装では、入力ファイルに空白行がないことを前提としています。ここには多くのハードコーディングがあります。改善したい場合があります。これがお役に立てば幸いです...

typedef struct foo
{
    char occupation[256]; 
    int numbers[2][5];
}FOO;

void function(FOO input[]);

void function(FOO input[])
{
    FILE* file;
    file = fopen("textfile.txt","r");
    int a = 0, count, i; 
    char temp[81];
    char randomwords[81];

    if (file == NULL)
    {
        return;
    }

    fscanf(file, "%[^\n]\n", randomwords);
    printf("%s\n", randomwords);
    while (feof(file) != EOF)
    {
        i = 0;
        i = fscanf(file, "%[^\n]\n", input[a].occupation);
        if (i == -1)
            break;

        for (count=0; count < 5; count++)
        {
            i = 0;
            i = fscanf(file, "%d", &(input[a].numbers[0][count]));
        }

        for (count=0; count < 5; count++)
        {
            i = 0;
            i = fscanf(file, "%d", &(input[a].numbers[1][count]));
        }

        a++;
        i = 0;
        i = fscanf(file, "\n");
        if (i == -1)
           break;
    };
    fclose(file);
}

int main(int argc, char *argv[], char *envp[])
{
    int     i, j, count;
    FOO input[10];

    function(input);

    for (count = 0; count < 2; count++)
    {
        printf("%s\n", input[count].occupation);
        for (i = 0; i < 2 ; i++)
        {
            for (j = 0 ; j < 5 ; j ++)
            {
                printf ("%d ", input[count].numbers[i][j]);
            }
            printf ("\n");
        }
        printf ("\n");
    }
}
于 2013-06-21T03:32:40.040 に答える