Узнайте больше о C стандарте IO . Обратите внимание, что gets
устарел и опасен, но теперь удален из стандарта C. Никогда не используйте его (и, пожалуйста, забудьте, что он существовал). Возможно, вы имеете в виду fgets(str, sizeof(str), stdin)
вместо вызова пропавшего gets
, предполагая, что str
это некоторый массив из char
с, например. объявлен как char str[100];
.
Вы можете прочитать всю строку с помощью fgets
(или даже getline (3) , см. this ), а затем проанализировать этот буфер, возможно, используя sscanf (или strtol , или strtok , или используя ваши собственные lexing & синтаксический анализ методов).
Обратите внимание, что sscanf
(например, fscanf
и scanf
) возвращает количество отсканированных элементов (и принимает %n
), но не заботятся о конце строк. Вы должны использовать это.
Внимательно прочитайте документацию по функциям, которые вы используете.
При чтении из подлинного файла вы также можете изменить положение внутри него, используя fseek (с ftell ). Это не будет работать на консоли (так как терминал обычно не searchable ).
Возможно, вы могли бы использовать некоторые терминальные связанные библиотеки (такие как ncurses или readline ). Они не входят в стандарт C11 n1570 и могут быть недоступны в вашей операционной системе (но у вас есть ОС Linux и некоторые другие).
Помните, что ваш стандартный ввод не всегда является терминалом. Подумайте о перенаправлениях и конвейерах .
Читайте также Как отлаживать небольшие программы . Обязательно скомпилируйте ваш код со всеми предупреждениями и отладочной информацией (поэтому gcc -Wall -Wextra -g
при использовании GCC ).
Если вы работаете в Linux или в другой операционной системе POSIX, учтите, что stdin связан с файловым дескриптором 0 (с именем STDIN_FILENO
). Так что, если вы хотите подождать, пока какой-либо ввод будет доступен, рассмотрите возможность использования poll (2) для этого файлового дескриптора.
PS. Ваш вопрос действительно неясен. Я могу только догадываться, что вы хотите сделать .... Подумайте об улучшении после прочтения дополнительной документации ...