2016-05-03 5 views
-1

Я написал программу для упражнений 1-20 из книги c языком программирования.Как передать аргументы функции main() на языке c?

Программа:

#include <stdio.h> 
#include <stdlib.h> /* for atoi() */ 
main(int argc, char *argv[]) { 
    int c,i,n; 
    if (argv[1]) 
     n=atoi(argv[1]); 
    while((c=getchar())!=EOF) { 
     if(c!='\t') { 
      printf("%c",c); 
     }else 
     { 
      for(i=1;i<=n;i++) { 
       printf(" "); 
      } 
     } 
    } 
} 

Как я могу передать аргументы основной функции() в языке Си без функции atoi()?

+0

Извините, я исправлю это. –

+1

'argv' - массив указателей на строки с нулевым завершением. Чтобы передать аргументы без функции 'atoi', просто не вызывайте функцию' atoi'. OTOH, для упражнения 1-20 единственным аргументом является число, которое преобразуется из строки в 'int' функцией' atoi'. Вам нужно решить, какое значение должно иметь значение 'n', если ошибка' if (arv [1]) 'не выполняется. Хорошим выбором будет 8. – user3386109

ответ

3

Все аргументы программы передаются как строки, а argc сообщают вам, сколько их есть, и argv, содержащие фактические аргументы.

Если вам нужно числовое значение, которое вы должны каким-то образом преобразовать их, и вы можете использовать atoi, как вы сделали, или использовать один из многих библиотек для анализа вариантов, как getopt

Вы должны проверить argc вместо проверка argv[1], поэтому

if (argc >= 2) 
    n=atoi(argv[1]); 

Посмотрите this удобного справочника.

+0

Спасибо за ваш ответ Сорен. –

1

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

int main(int argc, char *argv[]) { 
    int i; 
    for (i = 0; i < argc; i++) { 
     printf("Arg %d: %s\n", i, argv[i]); 
    } 
    return 1; 
} 
+0

Спасибо за ваш ответ Fjotten. –

1

Аргументы, переданные основным, - это те, которые вы передаете в командной строке. Пример: бинарный файл называется a.out вы могли бы сделать:

./a.out 5 

ARGV Массив теперь будет иметь два (ARGC) записи: [0] "./a.out" [1] "5".

Вы должны всегда проверять, достаточно ли argc до доступа к argv.

Кстати: atoi это просто преобразовать переданную String (argv[1]) в целое число

+0

Спасибо за ваш ответ mame98 –

+0

Нет проблем ...;) – mame98