Взятие значений через ввод и воспроизведение их во время выполнения - PullRequest
1 голос
/ 20 октября 2011

Мне нужно написать программу, в которой во время выполнения в качестве входных данных будет взят набор целых чисел произвольного размера.Они будут отделены пустым пространством.В конце дается новая строка, показывающая конец ввода.Как мне сохранить их в массив целых чисел, чтобы я мог отобразить их позже.Я думаю, что это немного сложно, потому что количество значений, которые будут введены, не известно во время компиляции

1 Ответ

0 голосов
/ 20 октября 2011

Звучит как домашнее задание.

Поправьте меня, если я ошибаюсь, и я дам вам больше, чем подсказки.

Вы можете объявить массив действительно большого размера, который вряд ли будетзаполненный пользовательским вводом, затем используйте scanf или что-то в этом роде для захвата целых чисел до тех пор, пока вы не нажмете '\ n', или вы не можете захватить каждое целое число за раз, выделяя память по мере использования, используя комбинацию вызовов malloc и memcpy.Первый вариант никогда не следует делать в реальных задачах, и я, конечно, не защищаю такие методы, даже если ваш учебник, вероятно, говорит вам, чтобы вы делали это таким образом.

В K & R есть такой же пример.

Это типичная проблема, с которой вы столкнетесь в C. Решение обычно - один из двух вариантов.

  1. Используйте действительно большой массив, достаточно большой для хранениявход.Иногда это плохой вариант, когда данные могут быть очень большими.Пример того, когда это будет плохой идеей, - это когда вы сохраняете видеокадр или большой текстовый файл в массив.Это также открывает вам возможность атаки переполнения буфера в более старых версиях Windows.Однако иногда это хорошее решение для быстрого взлома небольших программ (домашнее задание), где вы можете рассчитывать на пользователя (т.е. вашего профессора, который не пытается взломать вашу программу), чтобы он не вводил 1000 символов.Обычно это считается плохой практикой, пожалуйста, рассмотрите мой второй вариант из соображений безопасности, о которых я упоминал ранее.

  2. Используйте динамические массивы (например, malloc).Это, вероятно, то, что ваш профессор хочет, чтобы вы делали, поскольку это звучит как типичная проблема, когда студент впервые изучает указатели и массивы.Это отличный подход, просто не забудьте позвонить на память, когда вы закончите.Сложность в том, что вам все еще нужно знать размер массива, который вы хотите заблаговременно (хотя, конечно, не во время компиляции).

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