Progtwigcion basica

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;