Мне нужно сделать программу на C, которая принимает целые числа, переданные в качестве аргументов командной строки, и выводит сумму - PullRequest
0 голосов
/ 21 сентября 2019

Мне нужно написать программу в одном файле "sum.c", которая принимает несколько целых чисел в командной строке, берет сумму этих целых чисел и печатает их в стандартный вывод.Программа должна использовать что-то вроде strtol для преобразования строки в число.

Пока мой код выглядит так:

    #include <stdio.h>

int main (int argc, char *argv[]){
        int a, b, sum;
        int i; //looping through arguments using i

        if (argc<2) {
                printf("Please include at least two integers to get the sum.\n");
                return -1;
        }

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

sum=a+b;

printf(sum);
return (0);

}

Это включает в себя проверку ошибок, чтобы убедиться, что по крайней мере два аргументапрошло.Однако мой текущий код допускает только два аргумента.Мне нужно выяснить, как изменить это, чтобы обрабатывать любое количество аргументов, а также проверить, что переданные числа являются ТОЛЬКО целыми числами и ничем иным.У меня также все еще возникают ошибки компиляции с исходным кодом, который я разместил здесь.Я сделал большой перерыв в кодировании, поэтому знаю, что сейчас он очень плохой.

Обновленный код:

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

int main (int argc, char *argv[]) {
        int sum;
        sum = 0;

        if (argc<2) {
                printf("Please include at least two integers to get the 
sum.\n");
                exit (-1);
        }

        for (int counter = 1; argv[counter] != NULL; ++counter) {
                sum += atoi(argv[counter]);
        }

        printf("%d\n", sum);
exit (0);
}

Как это выглядит сейчас?

ОшибкаЯ получаю при выполнении:

./sum.c: line 4: syntax error near unexpected token `('
./sum.c: line 4: `int main (int argc, char *argv[]) {'

Ответы [ 2 ]

0 голосов
/ 21 сентября 2019

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

./sum.c

, который пытается запустить исходный код C.
Вам нужно что-то вроде

$ gcc -std=c99 -pedantic -Wall sum.c -osumexe
$ ./sumexe
0 голосов
/ 21 сентября 2019

Новый код в значительной степени хорошо, за исключением ошибки при вызове exit -1, которая является ошибкой.Вызов должен быть exit(-1).

. Причина, по которой exit -1 не генерирует ошибку компиляции, состоит в том, что C позволяет компиляторам принимать выражения, не имеющие законного действия (поэтому допустимый код C является следующим:

static void
useless_func (void)
{
    5;
    exit;
}

Эта функция имеет две строки, которые вообще ничего не делают - значение 5 и значение, являющееся адресом функции выхода. Обратите внимание, что вызов useless_func () приведет к , а не результатув вашей программе завершается, так как сама функция выхода не вызывается).

Вы можете видеть, что вы сами в своей программе, если вы вызываете без аргументов, программа не завершается - сумма 0будет напечатан.Если вы измените строку exit -1 на exit 1, вы получите ошибку компиляции, поскольку теперь у вас больше нет допустимого выражения (компилятор видит то, что у вас есть, как exit - 1, а не exit -1, а знак минус делает этовыражение).

Если вы используете gcc в качестве компилятора, компиляция с -Wall выдаст предупреждение.Если вы скомпилируете с -Wall -Werror (очень полезная привычка), вы получите ошибку.

Кроме того, вы должны завершить свою программу вызовом exit(0);

...