Estoy intentando escribir un progtwig que, dado un cierto número de entradas, generará el producto de la entrada enumerada (solo entradas de contabilidad de 0-9 e ignorando otras) Por ejemplo: input: 345 resultaría output: 60, u otro ejemplo sería, input: 3t4 y output: 12
Le he dado muchos bashs y esto es con lo que me quedo:
#include main(){ int c,i; c = getchar(); i = 1; while (c!= '\n'){ if (c>=48 && c<=57){ i=c*i; c=getchar(); } } printf("%d",i); }
Cambio
i = c*i;
a
i = (c - '0')*i;
Lo que sucede aquí es que la variable c
contiene el valor ascii del número, no el número. Entonces, '0'
es 48, '1'
es 49 y así sucesivamente. Así que cuando ingresas a 12, no obtendrás 1x2
sino 49x50
.
Echa un vistazo a la tabla de ascii. http://www.asciitable.com/
Retire las llaves del interior si bloque
#include main() { int c,i; c = getchar(); i = 1; while (c!= '\n'){ if (c>=48 && c<=57) i = (c-'0')*i; c=getchar(); } printf("%d",i); }
Tienes que convertir los caracteres que has leído en sus valores numéricos correspondientes. Como solo está utilizando dígitos, puede explotar / abusar del hecho de que los caracteres ASCII para ‘0’ a ‘9’ están en orden (de 48 a 57).
El uso de do { } while()
, en lugar de while() { }
obvia la necesidad de “preajustar” c
fuera del bucle.
El encabezado correcto para main
es int main(void)
o int main(int argc, char *argv[])
, y debe return
un valor desde main
.
Lo siguiente debería funcionar, aunque admito que no lo he comstackdo o probado:
#include int main(void) { int c; /* Character read */ int i = 1; /* Product */ do { c = getchar(); if (c>='0' && c<='9'){ i *= (c-'0'); } } while( c != '\n' ); printf("Product: %d\n",i); return 0; }
2 cosas a tener en cuenta: (1). Retire las llaves de si bloque. (2). Tenga cuidado de la conversión de código ASCII al número. i = (c – ‘0’) * i;