0

fscanf(またはテキスト ファイルの s を処理するその他の関数stdin) を使用して、同じ長さの整数の特定のグループをスキャンし、それらを同じ配列に配置すると同時に、より短い整数を無視するにはどうすればよいですか?必要以上に

txt ファイルは次のようになります。

63001234 1 1 -1 - - 0 1 1 1 - - 0
63001230 1 1 1 1 1 1 1 1 1 1 1 1
63001432 -1 -1 - - - - - - - - - -
63000176 - - 1 0 0 1 0 0 1 1 1 1

63... の数値を 1 つの int 配列に格納し、'1'、'-1'、'0'、'-' を別の char 配列に格納する必要があります。

これで、スキャンとテスト機能が 1 つになりました

int main() {

    printf("insert the name of the txt file you want to scan from: ");
    char fileopen [100];
    scanf("%s", fileopen);

    int Students [250];
    char Grades [250] [12];

    FILE *fop = fopen(fileopen ,"r");
    if(fop == NULL){
        printf("Error");
        EXIT_FAILURE;
    }
    int counter = 0;

    //read file
    while(1){
        if(fscanf(fop,"%d",&Students[counter]) == EOF){
            break;
        }
        for(int j = 0; j < 12; j++){
            fscanf(fop," %c",&Grades[counter][j]);
        }
        fscanf(fop,"\n");
        counter++;

    }

    counter = 0;
    //test what has been written in the arrays 
    while(counter <= strlen(Students)){

       printf("%d", Students[counter]);
       for(int j = 0; j < 12; j++){
            printf(" %c", Grades[counter][j]);
        }
        counter++;
        printf("\n");
    }

}
4

1 に答える 1

0

数字チェックを使用する代わりに、int と char を直接読み取ることができます。

// You can use dynamic memory allocation here instead, or an appropriate max size.
// I used 100 because this is a template.
int numbers[100];
int chars[100][12];

char* line = (char*)malloc(100);

int i = 0;
while (true)
{
    /* Read line into buffer */
    if ((fgets(line, 100, file) == NULL) || ferror(file) || feof(file))
    {
        break;
    }

    /* Skip empty lines */
    if (strcmp(line, "\n") != 0)
    {
        continue;
    }

    /* Scan the integer */
    if (i == 0) {
        sscanf(line, "%d", &numbers[0]);
    } else {
        sscanf(line, "\n%d", &numbers[i]);
    }

    /* Scan the 12 characters */
    for (unsigned int j = 0; j < 12; ++j)
    {
        sscanf(line, " %c", &chars[i][j]);
    }

    i++;
}
于 2013-03-27T15:00:44.170 に答える