そのため、同様の質問に対してほぼすべてのソリューションを試しましたが、どちらも機能しませんでした。次のような文字列があります。
AAAA BBBBBBBBBBBB CCCCCCC 15
  %s           %s      %s %d
私はこれまでに次のように試しました:
sscanf(str, "%s %s %s %d", ...); 
最初の %s も ' ' を食べてしまい、すべてうまくいきませんでした。その後、私は次のように試しました:
sscanf(str, "%6[^ ] %30[^ ] %8[^ ] %d[^\n]", ...);
同じことが起こります。この文字列の一部を sscanf で分割するにはどうすればよいですか?
編集:結果は構造体に入る必要があります。現在のコードは次のようになります。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct sor {
    char npkod[6];
    char nev[30];
    char tkod[8];
    int jegy;
} SOR;
double work(char* fnev, char* tkod)
{
    FILE * fp;
    char aktualis_sor[127] = { 0 };
    SOR beolvasott_sor;
    double atlag = 0.0;
    int ossz = 0;
    int db = 0;
    fp = fopen(fnev, "rb");
    if(fp == NULL)
    {
        printf("Fajl nem talalhato.\n");
        return -1;
    }
    while(fgets(aktualis_sor, 127, fp))
    {
        sscanf(aktualis_sor, "%6[^ ] %30[^ ] %8[^ ] %d", beolvasott_sor.npkod, beolvasott_sor.nev, beolvasott_sor.tkod, &beolvasott_sor.jegy);
        printf("%s %s %s %d\n\n\n", beolvasott_sor.npkod, beolvasott_sor.nev, beolvasott_sor.tkod, beolvasott_sor.jegy);
        if(strcmp(beolvasott_sor.tkod, tkod) == 0)
        {
            ossz += beolvasott_sor.jegy;
            ++db;
        }
    }
    fclose(fp);
    atlag = (double)ossz / (double)db;
    return atlag;
}
int main(void)
{
    printf("Atlag: %f\n", work("tan.txt", "INDK1010"));
    return 0;
}
そして、ここに実際の問題があります: オリジナル: AAA111 Harminckarakteresnevaaaaaaaaaa INDK1010 5
sscanf 後の printf: AAA111HarminckarakteresnevaaaaaaaaaaINDK1010♣ HarminckarakteresnevaaaaaaaaaaINDK1010♣ INDK1010♣ 5