2016-09-23 2 views
0

Мне интересно, есть ли способ предложить пользователю ввести 2 разных значения, , а затем сохранить эти два значения отдельно, все в одной пользовательской записи. Например:В C, есть ли способ взять несколько пользовательских входов из одной командной строки командной строки?

Enter your age and blood type : 34 AB 

Тогда мы будем хранить два enties отдельно, как

fgets(string,string, 64, 64, stdin); 

Очевидно, что это не будет работать, но есть способ, возможно в C. Я новичок в C (2 дней). Я знаю, что в Java вы можете использовать args [], определенные в основных и захваченных записях командной строки индексом, где каждое пространство в входе пользователя будет другим элементом массива args.

+0

Проверьте функцию scanf() и ее братья и сестры. Мой C немного ржавый, поэтому я не буду подвергать свою руку примеру. – Mick

+0

[Аргументы командной строки] (http://stackoverflow.com/documentation/c/1285/command-line-arguments#t=201609230546311317197) – BLUEPIXY

+0

«Да, так много программ». – user2864740

ответ

8

args в основных работах в C тоже, хотя обычное имя argv (вектор аргументов), как и в int main(int argc, char **argv).

Вы также можете использовать scanf, как в scanf("%d %s", &age, blood_type);.

Третий, и обычно рекомендуемый способ при обработке пользовательского ввода, чтобы отделить входной сигнал от анализа входного потока, как в:

fgets(line, sizeof line, stdin); 
sscanf(line, "%d %s", &age, blood_type); 

Более полная версия кода выше, с проверкой ошибок:

char line[100]; 
int age; 
char blood_type[100]; 
if (fgets(line, sizeof line, stdin) == NULL || 
    sscanf(line, "%d %s", &age, blood_type) != 2) { 
    fprintf(stderr, "Couldn't read age and blood type. Sorry.\n"); 
    exit(EXIT_FAILURE); 
} 

Поскольку line содержит не более 99 символов, плюс «\ 0», который отмечает конец строки, мы не можем получить переполнение в переменной blood_type. В противном случае мы могли бы использовать %99s вместо %s, чтобы ограничить количество символов, которые можно поместить в blood_type.

+1

Я бы добавил примечание о проверке результата * scanf *, потому что если есть ошибка синтаксического анализа, входные переменные остаются неизмененными (возможно, неинициализированными, что приводит к UB). Я также добавил бы примечание о предоставлении размера буфера для *% s *, чтобы избежать переполнения буфера длинным пользовательским вводом. – hyde

-1

Самый лучший способ на сегодняшний день является

char string[100]; 

if (fgets(string, sizeof(string), stdin) != NULL) { 
    // split the string here to extract the "n" values 
} 
+0

На самом деле вы не отвечаете на вопрос. –

+0

@ IngoBürk Почему нет? Вы хотите, чтобы я дал код? Вопрос в том, можно ли читать одну строку и извлекать из нее несколько значений. Кажется, я ответил. –

+0

Вопрос четко включает * how * для разделения нескольких аргументов. Попытка адвоката задать вопрос не собирается, чтобы удалить мой downvote здесь. –

-1

Один дополнительный вариант (зависит от вашей среды) - человек getopt.

+0

http://stackoverflow.com/questions/39653362/in-c-is-there-a-way-to-take-multiple-user-inputs-from-one-line-command-line-pro#comment66610200_39653362 – alk

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