ввод нескольких слов через scanf () - PullRequest
13 голосов
/ 24 августа 2010

каков был синтаксис для ввода строк с более чем одним словом, т.е. с пробелом между ними через scanf () not gets ()

Ответы [ 6 ]

16 голосов
/ 24 августа 2010

Это

scanf("%[^\t\n]",string);
5 голосов
/ 20 апреля 2013
char name[50];
printf("Enter your full name: ");
scanf("%[^\n]s",name);

Здесь [^\n указывает, что scanf( ) будет продолжать получать символы в name[ ], пока не встретится \n.

3 голосов
/ 24 августа 2010

Я не думаю, что это возможно с scanf ().Если вам известно количество слов, которые вы хотите прочитать, вы можете прочитать их с помощью

char str1[100], str2[100];
scanf("%s %s", str1, str2);

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

Если вы не знаете количество слов, вам, возможно, придется перефразировать ваш вопрос.Для чего вам нужно это прочитать?Почему вы не хотите использовать gets (), почему это должен быть scanf ()?

2 голосов
/ 03 января 2015

Лучше использовать fgets(), чем scanf() для чтения строки пользовательского ввода.

Если код должен использовать scanf(), тогда

char buf[100];

// Read up to 99 char and then 1 \n
int count = scanf("%99[^\n]%*1[\n]", buf);

if (count == EOF) {
  Handle_EndOfFile();  // or IO error
}

if (count == 0) {  // Input began with \n, so read and toss it
  scanf("%*c");
}

Теперь анализ bufотдельные слова.

1 голос
/ 14 апреля 2016
 char field1[40];
 char field2[40];
 char field3[40];
 char field4[40];
 char field5[40];
 char field6[40];
/*
 *  sscanf( workarea, format, field of pointers )   
 * Interpret  [^ ]      as a field ending in a blank
 * Interpret  [^' ']    as a field ending in a blank
 * Interpret [^ |\t]    as a field ending in blank or tab char
 * Interpret [^' '|\t]  as a field ending in blank or tab char
 * Interpret [^ |\t\n]  as a field ending in blank, tabchar or end-of-line
 *
 */
 strcpy(workarea,"Bread milk eggs cheese tomatoes cookies \n");
 i=sscanf(workarea," %[^' '|\t] %[^[' '|\t] %[^' '|\t]  %[^' '|\t] %[^' '|\t] %[^' '|\t|\n] ",
             field1,field2,field3,field4,field5,field6);

Результатом этого сканирования является поле 1, содержащее «Хлеб», поле 2, содержащее «молоко», ... поле 6, содержащее «печенье».Между первым и последним словами вы можете указать одну или несколько пробелов или вкладок. Последующие файлы cookie могут быть одним из трех пробелов, символов табуляции или новой строки, которые будут отброшены и не будут являться частью файлов cookie.

1 голос
/ 06 января 2012

Вы можете прочитать всю строку из файла, если хотите:

scanf("%[^\n]\n", line);

Теперь вы можете использовать sscanf, чтобы получить каждое слово:

sscanf(line, "%s", word);
line += strlen(word) + 1;

"line" и "word" являются указателями на символы.

Обратите внимание, как проходит линия, чтобы перейти к следующему слову.

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