Итак, я пробовал почти все решения для подобных вопросов, и ни одна из них не работала. У меня есть строка, которая выглядит следующим образом:sscanf для отдельных строк (более 2 строк)
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
Printf после sscanf: AAA111HarminckarakteresnevaaaaaaaaaaINDK1010 ♣ HarminckarakteresnevaaaaaaaaaaINDK1010 ♣ INDK1010 ♣ 5
См. Http://stackoverflow.com/questions/2091815/how-to-split-string-to-tokens-in-c для использования 'strchr' вместо' sscanf' –
Показать больше (и скомпилировать) пример кода , Эти вызовы 'sscanf()' отлично работают для меня, когда они передаются в разумных аргументах для размещения анализируемых данных. Я подозреваю, что вы можете проходить через фиктивные указатели или буферы, которые слишком малы. –
@Joey Egyetemi feladat? Нептун («нпкод»)? : D Лучше использовать 'strchr()' и/или 'strtok_r()'. Кроме того, 'const'-квалифицируйте свои входные аргументы. –