format fscanf()

0

mam kod w c:

  FILE *fp;
  if((fp = fopen("prog_conf.txt", "r")) == NULL)
  {
    printf ("\nNie mogę otworzyć pliku prog_conf.txt do zapisu!");
    return NULL;
  }
  printf ("\nPlik otwarto!\n");

  while( fscanf(fp,"%s\#%s",optionName,optionValue) != EOF)
  {
    printf("\n%s : %s",optionName,optionValue);
  }

  fclose(fp);

struktura pliku prog_conf.txt wygląda tak:

log_file#log.txt
mysql_server#localhost
mysql_user#root
mysql_pass#asd
mysql_db#schoolSubjects
defaultnumquest#5

Proszę o pomoc z formatem. Nie wiem co jest nie tak. fscanf() zapisuje mi cala linijke do zmiennej optionName, tak jakby nie zwraca uwagi na znak # w formacie - jako separatora. Zauwazylem ze dla znaku : takze sie tak dzieje. Gdy uzyje spacji, wszystko jest ok. Proszę o pomoc.

Pozdrawiam

0

sorka, oczywisice format ma postac "%s#%s" bez znaku / ... zzapomniaelm usunac po cudowaniu z tym formatem. Dalej jest to samo.

0

fscanf zaklada domyslnie, ze separatorami pol sa biale znaki. to znaczy, ze JUŻ PIERWSZY %s łapie wszystko az do pierwszego bialego znaku czyli caly ciag 'blabla#blablabla'. i to w 100% tlumaczy zachowanie jakie obserwujesz.

funkcje serii scanf/printf maja opcje formatowania niestety silnie zroznicowane w zaleznosci od platformy, mozesz miec np. tylko klasyczne %u/i/c/s/f/, ale i mozesz miec mozliwosc ustalenia jakie znaki Ciebie interesuja w owym stringu, np. gdziestam dzialal zapis a'la regexp: %[^:]

tutaj masz wycinek ze scanfem reagujacym na separator ; i pole maks 31 znakow. sadze ze dostosowany pod linux/g++ ale nie sprawdzalem

http://www.daniweb.com/code/snippet216535.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1