Tengo el siguiente problema. Necesito crear un programa que reciba un número del usuario, y que después pida diferentes signos para ir cambiando eventualmente el primer número. Y que al final se muestre de la siguiente manera:
Si el símbolo es -, al valor se le resta 1.
Si el símbolo es +, al valor se le agrega 1.
Si el símbolo es /, al valor se divide entre 2.
Si el símbolo es *, al valor se multiplica por 2.
(10)-(9)*(18)/(9)+(10)+(11) y así...
Tengo el siguiente código:
#include <stdio.h>
int main()
{
int N1[50], d2=0, d=1, i=0, d3=0; char S1[50];
for (int i3=0; i3<50; i3++)
{
N1[i3]=0;
S1[i3]=' ';
}
printf("Inserta un numero entero: ");
scanf("%d", &N1[0]);
while (S1[d2] = '0')
{
printf("Inserta el simbolo + para que aumente su valor en 1.\n");
printf("Inserta el simbolo - para que reduzca su valor en 1. \n");
printf("Inserta el simbolo * para que multiplique su valor por 2.\n");
printf("Inserta el simbolo / para que divida su valor en 2.\n");
printf("Inserta la opcion (simbolo) deseada (0 para terminar): ");
scanf("%c", &S1[d2]);
if (S1[d2]=='0')
break;
switch (S1[d2])
{
case '+' : N1[d]=N1[i]+1; /*CH[d2]='+'*/; break;
case '-' : N1[d]=N1[i]-1; /*CH[d2]='-'*/; break;
case '*' : N1[d]=N1[i]*2; /*CH[d2]='*'*/; break;
case '/' : N1[d]=N1[i]/2; /*CH[d2]='/'*/; break;
default : break;
}
d++; i++; d2++;
}
for (int i2=0; i2<d2; i2++)
{
if (N1[i2]==0)
break;
else
printf("(%d)%c\n", N1[i2], S1[i2]);
}
}
Sin embargo, no logro descubir el error, además de que el primer bucle while se repite antes de que me deje escribir algo.
Muchas gracias de antemano.
Citar(10)-(9)*(18)/(9)+(10)+(11) y así...
No me he detenido mucho al leer tu código, hay cosas que no entiendo o que las veo "complicadas" (que se pueden hacer las sencillo). Mira este ejemplo que he hecho a partir de tu código.
#include <stdio.h>
int main()
{
int numa=0,opt=0,i=0;
char simba,charop[50][50];
printf("Inserta un numero entero: ");
scanf("%d", &numa);
while(i<3) { //El bucle se repetirá 3 veces
printf("Inserta el simbolo + para que aumente su valor en 1.\nInserta el simbolo - para que reduzca su valor en 1.\nInserta el simbolo * para que multiplique su valor por 2.\n");
printf("Inserta el simbolo / para que divida su valor en 2.\nInserta la opcion (simbolo) deseada (0 para terminar): ");
getchar(); //Recojemos
scanf("%c", &simba); //Se guarda el operados en simba, en el ejemplo solo vale +
switch(simba) {
case '+' :
if(i==0) sprintf(charop[0], "(%d)+(%d)", numa, numa+1); //Si es la "cabeza" del string se debe mostrar el primer numero y el resultado de sumarle 1
else sprintf(charop[i], "+(%d)", numa+1); //Por el contrario si no es la cabeza, empezamos con + y luego el resultado de sumarle 1 al último numero
numa++; //Se supone que si el usuario introduce + quiere que el numero original se vea aumentado en 1
i++; //subimos el valor de i para indicar que NO será la "cabeza" xD
break;
}
}
for(i=0;i<3;i++) printf("%s", charop[i]);
printf("\n");
}
Ya se que no es lo que pedías, es un ejemplo funcional de algo parecido. Luego simplemente tendrías que imprimir el array recursivamente así por ejemplo:
for(i=0;i<3;i++) printf("%s", charop[i]);
printf("\n");
Inserta un numero entero: 1
Inserta el simbolo + para que aumente su valor en 1.
Inserta el simbolo - para que reduzca su valor en 1.
Inserta el simbolo * para que multiplique su valor por 2.
Inserta el simbolo / para que divida su valor en 2.
Inserta la opcion (simbolo) deseada (0 para terminar): +
Inserta el simbolo + para que aumente su valor en 1.
Inserta el simbolo - para que reduzca su valor en 1.
Inserta el simbolo * para que multiplique su valor por 2.
Inserta el simbolo / para que divida su valor en 2.
Inserta la opcion (simbolo) deseada (0 para terminar): +
Inserta el simbolo + para que aumente su valor en 1.
Inserta el simbolo - para que reduzca su valor en 1.
Inserta el simbolo * para que multiplique su valor por 2.
Inserta el simbolo / para que divida su valor en 2.
Inserta la opcion (simbolo) deseada (0 para terminar): +
(1)+(2)+(3)+(4)
Saludos, suerte y buen finde.
PD: Trata de comentar el código, para que quien lo lea no tenga que pensar xq rayos sumas esto a aquello o se lo quitas a lo otro...etc xD
Muchísimas gracias por tus comentarios, me haz solucionado el problemón que tenía con mi programa.
El problema es que yo tiendo a crear los códigos de una manera complicada, y nunca pienso que puede ser muy simple. Debo seguir practicando y pensar lógicamente en el problema y en su solución.
Muchísimas gracias, además de que no conocía el sprintf, y parece ser una buena solución.
Un detalle:
printf("Inserta el simbolo / para que divida su valor en 2.\nInserta la opcion (simbolo) deseada (0 para terminar): ");
getchar();
scanf("%c", &simba);
Cuando se utiliza el especificador "%c" este no descarta el espacio blanco previo (de ahi la llamada a getchar).
Para eliminar el espacio blanco y leer un unico caracter se puede utilizar:
printf("Inserta el simbolo / para que divida su valor en 2.\nInserta la opcion (simbolo) deseada (0 para terminar): ");
scanf(" %c", &simba);
El espacio en " %c" es critico (con el se elimina primero el espacio blanco y solo entonces se lee el caracter).
Un saludo