- El do y el casteo por el que preguntas static_cast<int>('n'); son innecesarios en este programa.
Y como te aseguras que el usuario no ha introducido otra cosa que no sea un valor numérico? y como sumas el total de todas las operaciones del loop?
No tienes ningún tipo de pausa en el programa. Puede que tu IDE las integre en desarrollo pero en varios sistemas si ejecutas el binario compilado, este no tiene pausa y se cierra la consola sin poder ver el resultado.
No veo la necesidad de hacer una pausa, vamos, es una aplicación de terminal, no vienes desde windows y le haces doble click al ejecutable, se supone que lo estás llamando desde el interprete de comandos, a demás.
char letra no te hace falta
Y como finaliza la instrucción del input del while?
Lo que te hace falta FranAI es transformar tu input a integer siempre y cuando este sea un valor numérico, en caso contrario no podrás transformar "n" a entero y te dará un error de memoria y la validación de contenido de un valor entero de un std string lo debes hacer recorriendo cada caracter, yo transformé cada uno al valor decimal y comrpobé si era el valor de un dígito. También entendí que la suma de los loops es para sumar el resultado de cada operación dentro del loop, asi que lo modifiqué poniendo las variables dentro del mismo loop para evitar globalizar las variables y tener basura en la memoria cuando liberes el proceso, las variables temporales las puse dentro del mismo while para que se autodestruyan en cada iteración. A demás, las palabras no se consideran como operaciones matemáticas asi que el contador lo puse justo después de la validación. Mira, algo así:
#include <iostream>
#include <string>
int main()
{
std::string input;
int totals = 0;
int nInputs = 0;
while(1)
{
std::cout << "Ingrese un numero entero (o 'n' para finalizar): "; // no flush
std::cin >> input;
if(input.compare("n") == 0)
{
break;
}
bool isNumeric = true;
for(int i = 0; i <= (input.length() - 1); i++)
{
if(((int)input[i] < 48) || ((int)input[i] > 57)) // decimal
{
isNumeric = false;
std::cout << "El valor no es numérico. Intentalo nuevamente." << std::endl;
break;
}
}
if(!isNumeric)
{
continue;
}
nInputs++;
int num = std::stoi(input);
int total = num * num - num;
totals += total;
std::cout << num << " * " << num << " - " << num << " = " << total << std::endl;
}
std::cout << nInputs << " numeros ha ingresado el usuario." << std::endl;
std::cout << "Suma de resultados calculados: " << totals << std::endl;
return 0;
}
Para compilar y ejecutar:
whk@machine:~/Escritorio$ g++ test.cpp -o test
whk@machine:~/Escritorio$ file test
test: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, not stripped
whk@machine:~/Escritorio$ ./test
Ingrese un numero entero (o 'n' para finalizar): 1
1 * 1 - 1 = 0
Ingrese un numero entero (o 'n' para finalizar): 5
5 * 5 - 5 = 20
Ingrese un numero entero (o 'n' para finalizar): abc
El valor no es numérico. Intentalo nuevamente.
Ingrese un numero entero (o 'n' para finalizar): 500
500 * 500 - 500 = 249500
Ingrese un numero entero (o 'n' para finalizar): n
4 numeros ha ingresado el usuario.
Suma de resultados calculados: 249520
También podrías simplificar "n*n-n" como "n*(n-1)", factorización de números semiprimos
Espero te sirva. Saludos.