命令行参数未返回正确的总数

时间:2019-09-19 18:23:24

标签: c

我正在尝试创建一个.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 个答案:

答案 0 :(得分:4)

您认为argc是什么?通过将hours_workedhourly_rate都设置为argc,您认为您要完成什么工作? argv是您传入的参数数量,而./main john doe 40 10.00 是这些参数的数组。如果您致电

argc

然后char* first_name = argv[1]; char* last_name = argv[2]; int hours_worked = atoi(argv[3]); double hourly_rate = atof(argv[4]); 将为5,您应该这样做来访问其他人

atoi

atof#include<iostream> #include<vector> using namespace std; using std::vector; using std::cout; using std::endl; using std::allocator; class FindAmountOutRange { public: static void findAmountOutRange(int amountNumbers, int firstIndexOfRange, int lastIndexOfRange) { int sum = 0; vector<int> numbers(amountNumbers); for (int number : numbers) { if (number < numbers.size()) { numbers.push_back(rand() % 100); } } for (int number : numbers) { cout << number << endl; } auto begin = numbers.cbegin(); auto end = numbers.cend(); numbers.erase(begin + firstIndexOfRange, end - lastIndexOfRange); for (int number : numbers) { cout << number << endl; } for (int number : numbers) { sum += numbers.at(number); } cout << sum << endl; } }; int main() { FindAmountOutRange::findAmountOutRange(10, 2, 5); return 0; } 分别将字符串转换为整数和浮点数。

答案 1 :(得分:1)

您的数学是错误的。更改

 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);

答案 2 :(得分:1)

使用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;
}