【发布时间】:2020-08-29 16:25:51
【问题描述】:
书上告诉我main的声明是这样的:
int main(int argc, char* argv[])
或
int main(int argc, char** argv)
看来int argc, char** argv 是我唯一可以作为实际参数发送的东西。
现在我不想处理字符串 main。
我想计算发送到 main 的整数的总和并返回总和。
#include <iostream>
int main(int n, char** argv) {
std::cout << n << std::endl;
char** temp = argv;
int sum = 0;
int i = 0;
while (*temp != NULL) {
std::cout << i++ << ':' << *temp << std::endl;
sum += *temp++;
}
return 0;
}
以上是我最初的想法,失败了。
由于从char到int的转换无效,无法编译
我认为参数必须是指向整数的 argc 数组。
以下是更新后的代码:
#include <iostream>
int main(int n, int* argv[]) {
std::cout << n << std::endl; //print the number of the arguments passed
int** temp = argv;
int sum = 0;
int i = 0;
while (*temp != NULL) {
std::cout << i++ << ':' << **temp << std::endl;
if (*temp != argv[0])
sum += **temp;
++temp;
}
std::cout << "The sum of all integered entered is " << sum << std::endl;
return 0;
}
用GCC编译代码后,输入./a.out 1 2 3,得到
4
0:778121006
1:3276849
2:3342386
3:1213399091
The sum of all integered entered is 1220018326
我知道它远非完美,但它比第一个更好。
我认为temp(或argv)被降级为指向整数指针的指针。
所以**temp 应该是一个整数。
为什么**temp 的打印看起来像一个指针?
如何正确地将整数的实际参数发送到 main 以计算总和?
【问题讨论】:
-
第一次尝试的结果是什么?
-
你需要转换成int。见
std::atoi。 -
您需要将main保留为
int n, char** argv并将数组中的字符串转换为整数。 -
只需循环
argc将每个argv[i]转换为int,然后添加。不需要temp **或类似的东西。问题似乎是你把argc值扔掉了,除了打印值之外不要使用它。 -
您在命令行输入的文本就是:text。当文本需要表示数值时,您必须将文本转换为数字。
标签: c++ parameters arguments parameter-passing main