2010-07-26 7 views
3

, пожалуйста, простите меня, если это вопрос о нобе, но я новичок в C, изучая только какое-то время. Я попытался написать программу, которая суммирует два числа (предоставляемые в качестве параметров для приложения). Код выглядит так:Доступ к аргументам командной строки в C

#include <stdlib.h> 
#include <stdio.h> 

int main(int argc, char** argv) 
{ 
    int a = atoi(argv[0]); 
    int b = atoi(argv[1]); 
    int sum = a+b; 
    printf("%d", sum); 
    return 0; 
} 

Но я получаю неверные результаты - огромное количество даже для небольших входов, как 5 и 10. Что здесь не так?

+2

Для отладки проблемы убедитесь, что вы печатаете входы и выходы. Первое, что нужно сделать, это добавить 'printf ("argv [0] =% s \ n", argv [0]); printf ("argv [1] =% s \ n", argv [1]); 'затем следует' printf ("a =% d \ nb =% d \ n", a, b); 'после вызовов 'atoi()'. Если бы вы это сделали, вам, вероятно, не пришлось бы задавать вопрос. (Не забудьте напечатать новую строку после ответа!). –

+0

Кроме того, это вопрос C; '#include ' - это заголовок C++. Используйте '#include '. –

+0

Спасибо, сделаю. – PeterK

ответ

18

Первый аргумент программы - это название самой программы. Вместо этого попробуйте использовать следующее.

int a = atoi(argv[1]); 
int b = atoi(argv[2]); 
+2

Все, вы побеждаете. Хотя теперь, когда я думаю об этом, почему он получает «огромные цифры»? Не должно ли 'atoi (argv [0])' быть '0' в большинстве случаев? –

+1

Спасибо, сэр! Это помогло. – PeterK

+1

@Michael Mrozek: Да, согласен, но пока эта ошибка не будет устранена, любая другая проблема не будет возможной. Ну что ж, дело решено. – torak

1

Вы хотите использовать argv[1] и argv[2].

Первый элемент в argv (argv[0]) - это command itself. Это будет ваше исполняемое имя программы ...

3

Thats потому, что argv [0] - это имя исполняемого файла.

Вы должны использовать argv [1] и argv [2].

И убедитесь, что счетчик (ARGC) равен 3.

1

Предполагая, что имя вашей программы noob.c и скомпилировать его с gcc ./noob.c -o noob. Вы должны внести эти изменения.

int a = atoi(argv[1]); 
int b = atoi(argv[2]); 

Вы должны запустить его ./noob 1 2 и вуаля выход будет 3.

argc - 3 из числа аргументов командной строки, ваш ввод будет 1-м и 2-м значениями из командной строки.

0

Это потому, что argv[0] этого название программы, а не первый аргумент (то есть, если вы запустите myapp 4 5, argv становится myapp, 4, 5).

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