Задать вопрос
Ответы пользователя по тегу C
  • Как вывести символы из строки?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    man strlen (и даже неудобно такое писать - strlen() - это одна из первых строковых функций :) )
    man calloc

    Для перечисления нужно завести отдельные массивы и копировать туда символ если условие сработало. А потом этот массив просто вывести.

    Кроме того, статические массивы - зло, память надо брать динамически. Код я не привожу намеренно, потому что Вы учитесь и Ваше обучение и состоит в изучении того, какие есть строковые функции а не в копипастинге. Как основа эта программа годится. Но в ней нужно:
    - заменить статическую память на динамическую
    - после чтения строки проверить ее длину, если она > 20 - спросить заново, что нас естественно приводит к тому, что запрос будет делаться в бесконечном цикле
    - в разборочном if не только крутить нужные счетчики, но и копировать символ в соответствущий массив.
    - после окончания разбора вывести все отобранные массивы.
    Ответ написан
    Комментировать
  • Как скопировать определенную строчку из файла?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Поиском в текстовом массиве.
    Через stat() получить размер файла, через malloc() запросить память, через open() / read() / close() считать его в массив - а дальше тупо strnstr() :)
    Просто как полено.

    А когда нашел нужное место в массиве - тут уже с ним можно что хочешь делать - копировать, выводить...
    Ответ написан
    Комментировать
  • Код с условием выхода, но работает только 1 scanf(), почему?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Чтобы гарантированно забирать символ с потока, используйте getc() или getchar() вместо scanf().

    JFYI: Форматирование кода придумали не просто так, а чтобы глаза не ломать на таких вот "произведениях искуства".
    Ответ написан
    6 комментариев
  • Как считать из файла двоичные числа и перевести их в десятичные?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    - Открыть файл в двоичном режиме (это важно! иначе все поломается!), выделить под него память, считать файл, закрыть
    - наложить на него указатель на массив коротких целых
    - перебрать массив, найти минимумы, максимумы, это простейшие вещи, их полно в тырнете
    - вывести на экран

    Ничего сложного от слова совсем. На коленке пишется.
    Ответ написан
    Комментировать
  • Как передавать строки в поле структуры Си?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Гуглим односвязный список.

    Кстати, зачем списку связность? Для поиска? Тогда лучше двусвязный, вперед и назад, правда заполнение становится сложнее.
    И память брать не только для структуры, но и для поля данных. И чистить сразу, чтобы не вляпаться.
    #define MAXLEN 1024 // Задаемся максимальной длиной строки
    struct Node *head;
    
    if ((head = calloc(sizeof(struct Node) + MAXLEN,1)) == NULL)
      puts("Cannot alloc memory");
    
    head->str = head + sizeof(struct Node); // тут данные
    strncpy(head->str¸ name, strlen(name));

    Почему нельзя просто переадресовать name? Если оно из кучи, оно запросто будет переписано, лучше хранить отдельно. Тупо но надежно.

    UPD: Немного поправил код - переставил неверно поставленную скобку в calloc()
    Ответ написан
    3 комментария
  • Почему данный код не срабатывает?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Потому что так нельзя.

    С - это не Perl, это низкоуровневый язык. Работая с массивами, нужно хорошо знать тему указателей, чтобы не задавать таких вопросов.
    Имя массива - это указатель на его первый элемент. То, что такая программа вообще собирается - это уступка ламерам, по идее тут ошибка должна выдаваться, чтобы давать по рукам сразу. В данном случае сравниваются два указателя, а они естественно разные.

    Строковые массивы можно сравнивать через strncmp()
    Числовые - перебором по значению
    Ответ написан
    Комментировать
  • Как в языке Си (C) в двумерном массиве выполнить проверку по вертикали?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Поскольку на самом деле все массивы в памяти одномерные :) переход по вертикали - это просто прыжок через N ячеек массива, где N - его ширина по горизонтали. Увеличиваете текущий указатель на (N * размер_ячейки_массива) - и попадете в следующий элемент по вертикали.
    Ответ написан
    7 комментариев
  • Сохранить данные в бинарный файл, после чего данные должны отобразиться на консоли (C язык)?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    man open
    man read
    man write
    man close

    Потоковыми фукциями правильно нельзя пользоваться - они могут '\n' сами добавлять.
    Ответ написан
  • Как получить массив элементов на выходе если возвращаемый тип функции int?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    что написать в return для этого?

    return 0;
    что вполне естественно :)
    Результат переворота - это что? Длина строки? Так Вы не заложили параметров для передачи - либо передавайте кодом возврата, либо добавьте параметр, причем добавить нужно указатель, чтобы в него писать.
    Ответ написан
  • Какую IDE посоветуете для C( просто си, не плюсы!)? И с какой книги начать изучать программирование на языке С?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Тру программист на С под винду - это розовый слон, умеющий говорить на китайском :) Задач для программиста на С под виндой - исчезающе мало, поэтому все тру программисты на С давно мигрировали на линух :) и там используют Eclipse :) или ничего - только редактор и gcc :)

    Самой лучшей книгой по С я до сих пор считаю ту, по которой начал учиться сам :) - Уэйт, Прата, Мартин "Язык С".
    Ответ написан
    Комментировать
  • Как исправить "Выражение должно иметь константное значение"?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Не заниматься такой ерундой.
    Либо
    float array[7][8];
    либо
    float *aptr;
    aptr = (float *) calloc(sizeof(float), 7 * 8);
    Ответ написан
    Комментировать
  • Можно ли использовать C в C++ проекте?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Ничего не мешает. Нужно разбирать конкретные ошибки.
    Ответ написан
    2 комментария
  • Можно ли начинать изучать С по книге "Язык программирования C Керниган&Ритчи"?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Зачем? Если собираетесь дальше работать на питоне - оно Вам надо будет только в самом общем плане. С лежит заметно ниже любого ООП-языка и все его основные фишки как раз в том, что в ООП обычно не используется (не, никто их не мешает использовать - просто не пользуются : ) )
    Ответ написан
    Комментировать
  • Как считать строку с файла и проверить ее на наличие нужных символов (Си)?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Ну, примерно так:
    - открыть файл, считать в буфер, закрыть файл
    - цикл построчного разбора (по символу '\n')
    Я так понимаю - нужно проверить на наличие комбинации "0.[0-9]"? (то есть "0." и дальше любая цифра). Тогда самый простой способ strstr() с поиском строки "0." Не нашли - ошибка, образец не найден. Если нашли - проверяем, что следующий символ попал в диапазон 0x30 - 0x39 ('0' - '9'). Если нашли - гуд, не нашли, ошибка, образец не найден.
    Ответ написан
    Комментировать
  • Сколько ячеек памяти будет занято при инициализации указателя адресом литерала?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Нет, неверно.

    В обеих случаях будет занято 10 байт (если предположить, что размер слова 4 байта). 6 байт займет строка "Hello\0" (zero-stop-byte будет добавлен автоматически) и 4 байта - указатель на нее. Просто в первом случае указателем будет &array[0].
    Обычно явное указание массива требуется только в том случае, если планируются операции типа инкремента/декремента, в особенности по структурному типу или по указателям (массивы структур или указателей) - там можно переложить на компилер множество тупой работы по расчету смещений. Но вообще адресная арифметика в С - она как нож - в умелых руках творит чудеса, в неумелых - оборачивается серьезными травмами :D
    Ответ написан
    Комментировать
  • Как перевести код из Linux в Windows?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Хэндловый ввод-вывод, блокировка файлов, и ESC-последовательности в винде работать не будут (про последнее правда не уверен). Этот пример нужно полностью переписывать, читая MSDN.
    Ответ написан
    Комментировать
  • Почему пустая программа на C занимает 6 килобайт?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Окей гугл
    бинарный файл формата ELF
    Ответ написан
    Комментировать
  • Цикл с EOF в С?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Потому что введено 16 символов :) '\n' (перевод строки) - это, еслиф че, тоже символ :)
    Ответ написан
    Комментировать
  • Как скомпилровать linux 2.0 на ubuntu 11.04?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    Что есть "линух 2.0"? Ведро версии 2.0 типа 2.0.36? Занафига такая древность?

    Ну и собственно, а что происходит-то?
    Ответ написан
  • Стандартное значение для scanf?

    CityCat4
    @CityCat4 Куратор тега C
    Дома с переломом ноги
    man ncurses, наверное. scanf() тут никак не поможет - он просто читает с ввода.
    Ответ написан
    Комментировать