scanf в цикле до возврата каретки - PullRequest
4 голосов
/ 06 апреля 2011

Я пытаюсь прочитать пользовательский ввод с несколькими полями.Но количество полей не указано.Я хочу прочитать все слова до возвращения кареты.я попробовал этот код, но он не работает:

char str[256];
while(1)
{
    scanf("%s", str);
    if(str[strlen(str)] == '\n')
         break;
    else
         printf("Got %s\n", str);

}

Примеры ввода пользователя:
1. store file1
Мне нужно проанализировать store и file1 и выйти из цикла.
2. store file1 file2
Мне нужно проанализировать store, file1 и file2 и выйти из цикла.

Хотите знать, как вырваться из петли при возврате каретки.

спасибо.

Ответы [ 5 ]

3 голосов
/ 06 апреля 2011

Используйте

char str[256]
scanf("%255[^\n]", str); /*edit*/

, который будет читать новую строку или (Edit :) 255 символов, в зависимости от того, что произойдет раньше.

1 голос
/ 06 апреля 2011
char str[256]
scanf("%256[^\n]", str);

Будьте осторожны с этим кодом. Это переполнит массив символов для длинных строк. Требуется% 255 в scanf для размещения нулевого терминатора.

1 голос
/ 06 апреля 2011

Попробуйте это.

char str[256];
while(1)
{
    scanf("%s", str);
    printf("Got %s\n",str);
    if(fgetc(stdin) == '\n')
        break;
}
1 голос
/ 06 апреля 2011

В настоящее время ваш массив символов str [256] заполнен ничем или мусором, поэтому, когда вы посмотрите вверх, вы не найдете его.

1 голос
/ 06 апреля 2011

Вы можете прочитать, используя fgets (), а затем разделить буфер, используя strtok (), на токены

, чтобы у вас был полный контроль над всем.

...