Подтвердить что ты не робот

Ввод нескольких слов с помощью scanf()

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

4b9b3361

Ответ 1

Это

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

Ответ 2

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

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

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

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

Ответ 3

char name[50];
printf("Enter your full name: ");
scanf("%[^\n]s",name);

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

Ответ 4

Лучше использовать 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 для отдельных слов.

Ответ 5

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

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

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

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

"строка" и "слово" - указатели char.

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

Ответ 6

 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 может быть одним из трех пространств, вкладок или новой строки, которые будут удалены и не будут частью "куки".