Almacenar los ceros iniciales en C

votos
0

Para empezar, yo soy nuevo en la programación

Me gustaría saber cómo almacenar un número con ceros a la izquierda en ella con scanf lugar de modificar el printf. ¿Está relacionado con los tipos de datos? Si es así, ¿qué es? y cómo lo uso? Yo sé que en la actualidad sólo int, double y float

Por ejemplo, me gustaría para introducir el número 02 y recibo 02 como la salida, y cuando la entrada 2, la salida también será 2.

Publicado el 19/09/2018 a las 17:10
fuente por usuario
En otros idiomas...                            


5 respuestas

votos
3

El resultado de usar scanfespecificadores d, i, o, u, x, a, e, f, ges un número matemático. No hay ceros a la izquierda. Conceptualmente, no hay dígitos en un número; se trata de una entidad matemática pura. (Como Jonathan Leffler observa, los ceros en la entrada importar el iespecificador; un cero cambia la base a octal mientras interpretar el numeral Esto es sólo para la entrada;.. El resultado sigue siendo un número sin dígitos o base asociada)

Para conservar los ceros a la izquierda de un numeral, debe tratarla como una cadena. scanfse puede utilizar para leer las cadenas de caracteres individuales o con los s, cy [especificadores, aunque es posible que desee utilizar una función get caracteres simples, tales como getchar. Usted tendría que contar los ceros a la izquierda usted mismo. Los dígitos restantes también podría ser manejado como una cadena, o se pueden convertir en un número.

Respondida el 19/09/2018 a las 17:19
fuente por usuario

votos
2

cómo almacenar un número con ceros a la izquierda (?)
que en la actualidad sólo sé int, double y float

Para almacenar un número entero y el recuento de cero a la izquierda es entonces 2 piezas de información. Al leer la entrada del usuario, registrar el número y su longitud o anchura del texto.

" "consumir espacio en blanco.
"%n"para registrar el desplazamiento de caracteres escaneadas hasta el momento. Esto no afecta el valor de retorno de scanf().

int num;
int n1, n2;
if (scanf(" %n%d%n", &n1, &num, &n2) != 1) {
  puts("Failed to read an int");
}

De lo contrario, imprimirlo.
"0": Pista con ceros.
"*": Anchura mínima para imprimir deriva de lista de argumentos.

else {
  int length = n2 - n1;
  printf("%0*d\n", length, num);
}

De entrada y salida

  007
007
Respondida el 19/09/2018 a las 17:41
fuente por usuario

votos
1

Si almacena el número como un entero (por ejemplo, int) o el tipo de punto flotante, cualquier información de formato se pierde inevitablemente: sólo la representación binaria del número se almacena. (Puede ayudar a considerarlo como el ahorro de la idea de la serie, por ejemplo, "dos", no cómo se ve cuando se escribe).

Necesita almacenar cualquier información adicional en otros lugares, como por el ahorro de la cadena original y el uso que para la salida, o guardando el número de dígitos y aplicar eso al printfformato. También hay bibliotecas de números decimales que se pueden guardar internamente la representación decimal del número, pero que es considerablemente más pesado que el uso de los tipos nativos.

(Como alternativa, sólo se asientan en un formato de salida canónica y el uso que, independientemente de la entrada. Es el objetivo de preservar realmente ninguna entrada formatear como es, o sería suficiente para añadir siempre los ceros a la izquierda a la salida?)

Respondida el 19/09/2018 a las 17:17
fuente por usuario

votos
0

Como ya se ha explicado, los números no tienen ceros a la izquierda.

Sin embargo, puede tratarla como una cadena

printf("Enter num: ");
char buf[50];
scanf("%s", &buf);
printf("You entered: %s", buf);
Respondida el 19/09/2018 a las 17:28
fuente por usuario

votos
0

Si usted tiene un intvalor, a nivel interno, siempre es representado como un cierto número de bits (o lo que su CPU utiliza para almacenar números ) por lo que no tienen control sobre esto.

Siempre hay "ceros" en términos del formato interno, ya que, por ejemplo, porque 2099 es en realidad 0b00000000000000000000100000110011en forma de 32 bits. Esto se complica debido a la endian problemas , pero vale siempre el principio.

La única vez ceros a la izquierda que tiene sentido es si está usando decimal codificado en binario , que ha caído fuera de moda, o la notación de cadena tales como los producidos por sprintffunciones de tipo.

Es sólo los seres humanos que se preocupan por los dígitos. Por lo que una computadora está preocupado es igualmente difícil añadir 1 + 1, ya que es 6916863870493370158 6471945999301299985 + porque son dos operaciones de 64 bits.

Respondida el 19/09/2018 a las 17:14
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more