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.
2 respuestas
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).
¿Ayuda lo siguiente?
int total = 0;
for(--argc; argc > 0 ; --argc) total += atoi(argv[argc]);
Preguntas relacionadas
Nuevas preguntas
c++
C ++ es un lenguaje de programación de propósito general. Originalmente fue diseñado como una extensión de C y tiene una sintaxis similar, pero ahora es un lenguaje completamente diferente. Utilice esta etiqueta para preguntas sobre el código (a ser) compilado con un compilador C ++. Utilice una etiqueta de versión específica para preguntas relacionadas con una revisión estándar específica [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] o [C ++ 23], etc. .