命令行参数中的2位数仅作为单个数字处理

时间:2017-03-07 08:56:38

标签: c++ command-line-arguments

以下是我average.cpp中的代码:

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[]) {
  int total = 0;
  for(int i=1; i<argc; i++) {
    char cnum = *argv[i];
    string snum = "";
    snum += cnum;
    total += stoi(snum);
  }

  cout << "The average is " << total/(argc-1) << endl;

  return 0;
}

当我运行./average 3 5 33时,答案应向下舍入到13,但我得到3。当我运行./average 3 5 44时,答案应该向下舍入到17,但我得到4。我知道只有参数的第二个数字被忽略,但我不确定如何包含第二个数字。

2 个答案:

答案 0 :(得分:1)

以下是否有帮助?

  int total = 0;
  for(--argc; argc > 0 ; --argc) total += atoi(argv[argc]);

答案 1 :(得分:1)

char cnum = *argv[i];

这是参数的第一个字符。你不想只是第一个字符,你想要整个参数。所以写一下:

    const std::string snum = argv[i];
    total += std::stoi(snum);

(你可以把它写成:

    total += std::stoi(argv[i]);

这取决于从const char*std::string的隐式转换 - 但在调试命名中间值时通常很有帮助。)