変数があります。この変数には、.txtファイルがあります。ファイルには、次のようになります。
C言語の文字列の最初の要素の最初の要素を取得します。
Element1|Element2|Element3|...|ElementLast#Element1|Element2|Element3|...|ElementLast#Element1|Element2|Element3|...|ElementLast#Element1|Element2|Element3|...|ElementLast
今、私はしたいものをすべての「要素1」を取得し、それが特定の文字列と等しいかどうかを確認すること、です。
私は関数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は」入れ子になっていることを可能にするstrtok_r'を調べることができます。 – immibis
'fgets(pluc、sizeof(pluc)、plu)!= 0);'は何もせずにそのセミコロンでEOFにすばやく到達します。それを削除した後、次のコードブロックには '{中括弧}'が必要ですか? –
なぜstrtokを使うのですか?strstrはうまくいかないでしょうか? – Hogan