Аргументы командной строки не возвращают правильную сумму - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь создать программу .c, которая принимает 4 аргумента командной строки, а затем возвращает один оператор с last_name, first_name: total_payment, где общая сумма платежа - это третий аргумент, умноженный на четвертый аргумент.Я новичок в .c, поэтому у меня проблемы с аргументами командной строки.

    char* first_name = argv[1];
    char* last_name = argv[2];
    int hours_worked = argc;
    double hourly_rate = argc;
    double total_payment;
    total_payment = hours_worked * hourly_rate;

Когда я запускаю код, он всегда получается равным 0,00 вместо умножения третьего и четвертого аргументов.Значение в аргументах не сохраняется?

Ответы [ 3 ]

4 голосов
/ 19 сентября 2019

Как вы думаете, что такое argc, и что, по вашему мнению, вы достигаете, задав для него значения hours_worked и hourly_rate?argc - это количество аргументов, которые вы передали, а argv - это массив этих аргументов.Если вы позвоните

./main john doe 40 10.00

, тогда argc будет 5, и вы должны получить доступ к другим, выполнив

char* first_name = argv[1];
char* last_name = argv[2];
int hours_worked = atoi(argv[3]);
double hourly_rate = atof(argv[4]);

, где atoi и atof преобразуют строку вцелое число и число с плавающей запятой соответственно.

1 голос
/ 19 сентября 2019

Преобразуйте argv[2] и argv[3], используя либо atof().Использование atof() для обоих числовых значений в случае, если один может работать полчаса.

Убедитесь, что по крайней мере четыре аргумента переданы программе.Примечание argc будет одним, если аргументы не переданы - для argv[0], который содержит имя программы.Таким образом, argc будет равно как минимум 5, если указано правильное количество аргументов.

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

int main(int argc, char *argv[]) {
    if (argc < 5)
    {
        fprintf(stderr, "%s: Insufficient arguments\n", argv[0]);
        exit(1);
    }

    char* first_name = argv[1];
    char* last_name = argv[2];
    int hours_worked = atof(argv[3]);
    double hourly_rate = atof(argv[4]);
    double total_payment = hours_worked * hourly_rate;

    printf("%s, %s: %.2lf\n", last_name, first_name, total_payment);
    return 0;
}
1 голос
/ 19 сентября 2019

Ваша математика неверна.Измените

 total_payment = hours_worked * total_payment;

на:

 total_payment = hours_worked * hourly_rate;

Также вы неправильно инициализируете эти значения, попробуйте:

int hours_worked = strtol(argv[2], NULL, 10);
double hourly_rate = strtof(argv[3], NULL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...