Aquí está el código en mi 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;
}

Cuando ejecuto ./average 3 5 33, la respuesta debería redondearse a 13, pero en su lugar, obtengo 3. Y cuando ejecuto ./average 3 5 44, la respuesta debería redondearse a 17, pero obtengo 4. Sé que solo se ignora el segundo dígito del argumento, pero no estoy seguro de cómo incluir el segundo dígito.

-3
Aaron Kang 7 mar. 2017 a las 11:56

2 respuestas

La mejor respuesta
char cnum = *argv[i];

Esto está tomando el primer carácter del argumento. No solo quieres el primer carácter, quieres el argumento completo . Entonces solo escribe:

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

(Podrías escribirlo solo como:

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

Esto se basa en la conversión implícita de const char* a std::string, pero a menudo es útil al depurar para nombrar valores intermedios).

1
Martin Bonner supports Monica 7 mar. 2017 a las 09:02

¿Ayuda lo siguiente?

  int total = 0;
  for(--argc; argc > 0 ; --argc) total += atoi(argv[argc]);
1
Frank-Rene Schäfer 7 mar. 2017 a las 09:02