Vamos por partes dijo Jack y de paso a ver si entendí lo que intentas hacer
Ahora el código estaría bien encarado y cumple con la consigna, algo que el original no hacía, pero hay un detalle...
Hay algo que se llama "ámbito de una variable" que dice que una variable se extingue al salir de su ámbito de definición, o sea ya no se puede usar.
Por eso hay variables globales y variables locales, las primeras se mantienen para todo el programa, las otras solo donde fueron definidas.
Tú estás definiendo (definir no es lo mismo que asignar) la variable "signo" dentro de las sentencias if(), por lo tanto se pierden al salir de if() porque se sale de su ámbito de definición. Es por eso, además, que el compilador no te da error por definición múltiple de variables, porque si bien la defines varias veces, inmediatamente se extingue su uso.
Un ejemplo muy claro de ámbito de una variable es el típico
for(int i = 0; i < unas_cuantas; i++) {
// acá hace algo unas_cuantas veces;
}
Supongamos que dentro del lazo pusiéramos break ante determinada condición y luego para guardar el punto en que salió del lazo hiciéramos
int a = i;
Tendríamos un error al compilar que diría que "i" no está definida (porque la variable "i" dejó de existir al terminar el lazo for()) .
Para que eso no ocurra deberíamos hacer
int i;
for(i = 0; i < unas_cuantas; i++) {
// acá hace algo unas_cuantas veces;
}
int a = i;
Así el ámbito de "i" se declara fuera del for() y al salir de éste se conserva.
Todas las variables que no quieres que se pierdan dentro del loop() debes definirlas al principio del mismo (serían locales) o definirlas globales al principio del código (para ser prolijo).
Y fíjate porque has hecho lo mismo con todas las variables, es probable que luego tengas errores con otras. Por ejemplo hay variables definidas dentro de los case que (ahora ya lo sabes) se van a crear al entrar a un case pero se van perder al salir del mismo.
Otra cosa a tener en cuenta es cómo manejas la resta, puedes tener conflictos si se empieza ingresando un número negativo.
Ten cuidado porque lo que al principio era un error casi menor (usar string donde iba char) lo estas complicando cada vez más, lo que lleva a que cometas nuevos errores porque no interpretas, o no entiendes bien, las instrucciones que estas agregando y como usarlas.
Saludos