Возможно, вам потребуется больше узнать о программировании и структурах данных. Я бы порекомендовал SICP, отличное бесплатное введение в программирование (которое не< /эм>о С).
Вам нужно больше узнать о C. В частности, о массивах (но у них есть ограничения, я предоставлю вам выяснить, какие из них), возможно, struct
, указатели, динамическое выделение памяти C. Это займет у вас несколько недель, и вам нужно прочитать несколько книг (а также некоторые справочные материалы, такие как здесь, возможно, загляните также в спецификацию C11, т.е. ">n1570).
(спросите себя, что произойдет или должно произойти, если пользователь вашей программы введет имя из 50 букв или даже из миллиона; а как насчет «неправильного» ввода, например, цифр или знаков препинания? подумайте, что такое имя на самом деле внутри компьютера)
Поскольку вам необходимо использовать только getchar и putchar, вам необходимо внимательно прочитать их спецификацию. Имейте в виду, что stdio часто выполняет буферизацию. Возможно, вам потребуется использовать fflush.
Затем вы можете прочитать имя в какой-либо структуре данных (я оставляю вас, чтобы выяснить, какие из них), и вы можете читать по одному символу за раз, используя getchar
для заполнения этой структуры данных. Точно так же вы можете выводить эту структуру данных по одному символу за раз, используя putchar
.
Конечно, вы будете использовать некоторые примитивы управления потоком (вероятно, своего рода цикл).
Мы не будем делать вашу домашнюю работу.
Не забудьте включить все предупреждения и информацию об отладке в вашем компиляторе (например, компилируйте с помощью gcc -Wall -Wextra -g
при использовании GCC). ...). Прочтите документацию по вашему компилятору (например, просмотрите Вызов GCC главу). Конечно, научитесь пользоваться отладчиком (gdb
, см. Отладка с помощью ГБД)
Вы тот, кто начинает изучать программирование на C. Будьте настойчивы, это требует некоторого времени (недели или месяцы работы). Прочитайте несколько книг, изучите исходный код существующего программного обеспечения на C (например, бесплатное программное обеспечение на github).
ПС. Для экспертов по C выполнение домашней работы тривиально; однако вы должны учиться сами - цель домашнего задания - научить вас чему-то - и если вы скопируете решение из другого места, вы ничему не научитесь
person
Basile Starynkevitch
schedule
07.09.2017
char name;
:name
может содержать только один символ. - person BLUEPIXY   schedule 07.09.2017getchar()
, являетсяint
, а неchar
, потому что оно должно иметь возможность возвращать любой символ и отличное значениеEOF
. Вы также должны обрабатывать EOF в своем цикле ввода, в идеале (потому что, если ваш существующий код сталкивается с EOF, программы продолжают работать долгое, долгое, долгое время). - person Jonathan Leffler   schedule 07.09.2017