У меня есть переменная, в которой я читал .txt-файл. Файл выглядит следующим образом:
Получить первый элемент первого элемента строки в C
Element1|Element2|Element3|...|ElementLast#Element1|Element2|Element3|...|ElementLast#Element1|Element2|Element3|...|ElementLast#Element1|Element2|Element3|...|ElementLast
Теперь то, что я хочу сделать, это, чтобы каждый «» element1 и проверить, если оно равно к конкретной строке.
Я много читал о функции strtok()
, и я попытался ее использовать.
Это моя функция: (ID это специальная строка, я преобразовать его во время функции.)
int PLUexists(int id) {
char idc[3];
sprintf(idc, "%d", id);
printf("%s", idc);
/* My Main String */
FILE *plu = fopen("kassa_plu.txt", "r");
char pluc[2000];
while(fgets(pluc, sizeof(pluc), plu) !=0);
/* My Token */
char *token;
/* get first line */
token = strtok(pluc, "#");
while(token != NULL) {
printf(" %s \n", token);
// Without that block, I get all lines seperated...
char t[255];
strcpy(t, token);
if (strcmp(strtok(t, "|"), idc) == 0) {
printf("Jep");
return 1;
}
// End 'block'
token = strtok(NULL, "#");
}
return 0;
}
Теперь, если я просто распечатать первый символ (и повторить его), я получаю все мои строки (см. ниже), но когда я также разбираю код между printf(" %s \n", token);
и token = strtok(NULL, "#");
, он не будет работать.
Без блока:
Element1|Element2|Element3|...|ElementLast
Element1|Element2|Element3|...|ElementLast
Element1|Element2|Element3|...|ElementLast
Element1|Element2|Element3|...|ElementLast
С ним:
Element1|Element2|Element3|...|ElementLast
Element2|Element3|...|ElementLast
Element3|...|ElementLast
...|ElementLast
ElementLast
Вы можете посмотреть 'strtok_r', который позволит вам иметь вложенные«strtok петли». – immibis
'while (fgets (pluc, sizeof (pluc), plu)! = 0);' быстро достигнет EOF с этой точкой с запятой, не делая ничего. После его удаления, нужен ли следующий блок кода '{braces}' вокруг него? –
Зачем использовать strtok - не будет strstr? – Hogan