2012-06-01 2 views
1

Интересно, как написать программу C с опциями, которые могут быть вызваны с помощью терминала
Пример: Person.cC программы с параметрами командной строки

#include <stdio.h> 
void main() 
{ 
    char option; 

    if(option = 'f') printf("First Name"); 
    else if(option = 'l') printf("Last Name"); 
    else printf("Full Name"); 
} 

Собирать с

куб.см Person.c -o Person

Вопрос:
Я хочу, чтобы достичь своей Progra м Варианты через терминал
Пример:

./Person -f 

Выход: Имя

ответ

7

void main() неправ, если вы скопировали это из книга, бросьте книгу

Это должно быть int main(int argc, char **argv), тогда argc будет задано количество аргументов и argv [1] .... argv [argc-1] - строки аргументов (argv [0] это название программы)

+2

+1 для «бросить книгу» .... действительно нужно ... :) – havexz

+0

Зачем использовать int перед main? –

+2

Программа AC возвращает int в ОС, когда она заканчивается (поэтому последний оператор в основном является «return 0;» Обычно 0 означает, что он сработал, а любой другой номер содержит ошибку. См. Ответ Брендана ниже для примера –

1

Пожалуйста, измените ваш главный прототип как

int main(int argc, char *argv[]) 

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

Параметр argc сообщает вам, сколько входов было передано через терминал, и argv предоставит вам каждый вход в виде массива char *. Обратите внимание, что первый вход (argv [0]) будет по умолчанию именем файла исполняемого файла с полным путем, а остальные входы будут следовать за ним.

http://www.cprogramming.com/tutorial/c/lesson14.html - Этот учебник также поможет.

1

вы должны сказать C, что ваш придав ему варианту

int main(int argc, char **argv) 

ARGC этого числа аргументов и ARGV аргумента вы называете

так, то ./Person -f

вам необходимо сообщить об этом

if (strncmp(argv[i],"-f",1) == 0) { 
1

correct form for a main function является:

int main(int argc, char **argv) { 

} 

Тогда argv держит свои аргументы командной строки:

int main(int argc, char **argv) { 
    for(int i = 0; i < argc; ++i) { 
     printf("arg %d is %s", i, argv[i]); 
    } 
    return 0; // indicates that the program completed successfully 
} 
2

Позвонить в с этими входами:

Int основных (INT ARGC, символ ** ARGV)

ARGC является количество арг и ARGV массив аргументов командной строки. Обратите внимание, что первым аргументом argv является имя программы.

1

Вы также должны посмотреть на некоторые из разделяющих библиотек. Многие люди написали большие библиотеки для анализа параметров командной строки, так что вам не нужно повторять всю работу по проверке параметров. Большинство из них довольно просты в использовании.

+1

Если это было что это правда, но это, очевидно, новичок, поэтому изучение того, как работает argv [], и hwo для сравнения строк, более полезно, чем просто использовать getopts() –

2

Вот мои $ 0,02:

#include <stdio.h> 
#include <string.h> 

int 
main (int argc, char *argv[]) 
{ 

    if (argc != 2) { 
     printf ("USAGE: ./Person [-f|-l]\n"); 
     return 1; 
    } 
    if (strcmp (argv[1], "-f") == 0) { 
     printf("First Name"); 
    } 
    else if (strcmp (argv[1], "-l") == 0) 
     printf("Last Name"); 
    } 
    else { 
     printf ("Unknown argument\n"); 
     return 1; 
    } 
    return 0; 
} 

Важные моменты:

1) В C, вы не можете просто сравнивать строки (например, "ааа" == "БББ"). Вам нужны специальные библиотечные функции, такие как «strcmp()» («сравнить строки»).

2) Для использования функций библиотеки вам необходимо # включить заголовки (например, "stdio.h", для "printf()" или "string.h", для "strcmp()"). Вы можете узнать, какие заголовки вам нужны, используя «человек» ... или просто Google для соответствующего вызова («google strcmp» должен дать вам те же результаты, что и «man strcmp»)

3) Это хороший генерал чтобы использовать программы, возвращающие значения, чтобы указать «успех» или «отказ». «0», по соглашению, обычно означает «успех».

4) Наконец, для ваших целей важно использовать «argc» и «argv» для доступа к аргументам командной строки.

5) «if ​​(argc! = 2)» вверху гарантирует, что вы ввели хотя бы один аргумент командной строки (аргумент «0» - это имя самой программы). Это важно, потому что попытка прочитать аргумент, который у вас отсутствует («попытка прочитать конец массива») может привести к сбою;)

«Надеюсь, что это поможет!

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