Понедельник, 02 Декабря 2024, 12:37

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
fscanf() и чтение отдельных частей строки
vasua99Дата: Вторник, 09 Октября 2012, 20:36 | Сообщение # 1
GNU follower
Сейчас нет на сайте
Здравствуйте, сейчас я пишу телефонный справочник на конкурс по программированию, и возникла одна проблема:

Имеется структура:
Code

typedef struct {
  int index; // используется для более быстрого поиска
  char *name; // ФИО
  char *phone; // номер телефона
} element;


и следующий код:

Code

for(i = 0; i < count_element; i++) {
   tmp.name = malloc(sizeof(char) * 64);
   tmp.phone = malloc(sizeof(char) * 20);
   fscanf(db_file, "%d:%s:%s\n", &(tmp.index), tmp.name, tmp.phone);
   add(&db, (void*)(&tmp));
  }


после пытуаюсь вывести данные следующим способом:
Code

element *e = get_element(&db, 0);
  printf("%s - %s\n", e->name, e->phone);

в результате входит примерно это:
Code
Vasiliy:+79871111111 -


а должно:
Code
Vasiliy Kozlov - +79871111111


формат элемента в файле таблицы данных таков:
Code
index:name:phone


подскажите пожалуйста, где тут ошибка и каким образом ее можно исправить, уже 2 часа сижу думаю? Скорее всего это при чтении данных из файла(fscanf) но каким образом тогда читать чтобы правильно получалось.


Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
НохчиДата: Вторник, 09 Октября 2012, 21:20 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
А fscanf здесь не нужен, да и юзаешь ты его криво. Читай всю строку с помощью fputs и пропарси ее с помощью strtok.

Многие вопросы по Windows отпадут, если посмотреть тут

Сообщение отредактировал Нохчи - Вторник, 09 Октября 2012, 21:23
vasua99Дата: Вторник, 09 Октября 2012, 22:13 | Сообщение # 3
GNU follower
Сейчас нет на сайте
Спасибо, теперь работает, сделал так;
Code

char *tmp_str = malloc(sizeof(char) * 256);
for(i = 0; i < count_element; i++) {
   tmp.name = malloc(sizeof(char) * 64);
   tmp.phone = malloc(sizeof(char) * 20);
   fgets(tmp_str, 256, db_file);
   tmp.index = atoi(strtok(tmp_str, ":"));
   strcpy(tmp.name, strtok(NULL, ":"));
   strcpy(tmp.phone, strtok(NULL, ":"));
   add(&db, (void*)(&tmp));
  }


Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг