2013-09-23 2 views
2

Мне нужно создать программу, которая запрашивает у пользователя ввод (пока она не завершит ее, набрав exit). Вход разделяется запятыми (пример: value,value,value). Каждое отдельное значение затем должно быть помещено в свою собственную переменную.Получить ввод через запятую

Пример:

Если пользователь вводит в hello,15,bye, мне нужно поставить hello в переменную first, 15 в переменную second и bye в переменную third.

Вот что я до сих пор:

int main(void) { 
    char input[100]; 
    char first[100]; 
    char second[100]; 
    char third[100]; 

    printf("Enter commands: "); 

    while(fgets(input, 100, stdin)) { 
    if(strncmp("exit", input, 4) == 0) { 
     exit(0); 
    } 

    // missing code 
    } 
} 

Как бы отделить вход в запятыми и добавить значения в свои собственные переменные?

+1

Меньше: рекомендую 'fgets (input, sizeof input, stdin)'. – chux

ответ

4

Использование sscanf() и сканирования наборы:

if (sscanf(input, "%99[^,],%99[^,],%99[^,\n]", first, second, third) != 3) 
    ...oops... 

В 99-х появляются, поскольку строки определяются как 100, и это не гарантирует отсутствие переполнения, хотя и с входной линии также 100, переполнение не является проблемой.

Два набора сканирования: %99[^,], который выглядит как ограниченная форма регулярного выражения; каретка означает «отрицательный набор сканирования», и поэтому строка соответствует чему угодно, кроме запятой. Последний - %99[^,\n], который исключает символы новой строки, а также запятые.

Вы можете пропустить ведущие пробелы в именах, добавив пробелы перед спецификациями преобразования. Недопустимо избегать бегущих пробелов; если это проблема, удалите их после успешной конверсии.

Смежные вопросы