Разделение запятой не работает должным образом - PullRequest
0 голосов
/ 25 апреля 2019

Я читаю некоторые данные из текстового файла, я пытаюсь перебирать построчно и разделять запятыми, и игнорирую строки, начинающиеся с #, вот содержимое текстового файла:

# это файл симуляции для вашего упражнения, пожалуйста, прочитайте его внимательно.

# каждая строка, которая начинается со знака фунта [теперь известный как "the" hashtag (#)], является строкой комментария.Вы можете автоматически пропустить его.

# вот несколько примеров.

# будет 5 категорий: комедии, приключения, развивающие, научно-фантастические, фантастические.# Рекомендуется, чтобы при сохранении в основной программе вы выполняли эту конвекцию.# синтаксис ввода: # id, название книги, автор, страницы, год издания, категория CNV301, Остров сокровищ, Роберт Луи Стивенсон, 304,1882, Приключение 8T88FF, Наследник Империи, Тимоти Зан, 416,1992, SciFi 911MAR10, Сантехникадля чайников, Джин Гамильтон, 242,1999, учебный 6U754E, Берсерк, Кентуро Миура, 224,1989, фэнтези 7R011, Поваренная книга троллей: человеческие удовольствия, Underchief Trogdor, 7, -35, учебный M140, веселые кошки, Жан-Клод Суарес78,1995, Комедия V269W7, Линус Вегетарианец Т. Рекс, Роберт Нойбекер, 40,2013, Приключение UFF404, Алгебра 3, Неби Роген, 300,0, Обучающий 424242, Автостопом по Галактике, Дуглас Адамс, 224,1979, комедия

# добавь свою.Вы можете использовать такие сайты, как: http://www.generatedata.com/ для создания быстрых списков.

Вот мой код:

  FILE* file = fopen(filepath, "r");
    char line[256] = "";
    while (fgets(line, sizeof(line), file) != NULL) {
    if (!starts_with(line, "#") && !starts_with(line, " "))
    {
            if (line[0] == '#' || line[0] == '\n')
                continue;  // skip the rest of the loop and continue
            printf("%s", line);

            char* p;
            p = strtok(line, ",");
            while (p != NULL)
            {
                //printf("%s\n", p);  //<-- line*******
                p = strtok(NULL, ",");
            }
     }
    }
        fclose(file);

где:

int starts_with(const char* line, const char* c)
{
    size_t lenpre = strlen(c),
        lenstr = strlen(line);
    return lenstr < lenpre ? 0 : strncmp(c, line, lenpre) == 0;
}
  1. Когда я запускаю код и печатаю первую строку с некоторыми странными символами, такими как: ∩╗┐#this is the simulation file for your exercise, please read it carefully.

  2. , если я включаю закомментированную строку: //<-- line******* Я получаю сообщение об ошибке: «Место чтения нарушения доступа», я хочу видеть только разделенные значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...