我正在尝试创建一个.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,而不是将第三和第四参数相乘。是否不保留参数中的值?
答案 0 :(得分:4)
您认为argc
是什么?通过将hours_worked
和hourly_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;
}