Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

163
Visualizações
Usar mensajes dentro de la cadena de control de formato

Cuando uso la función scanf , he estado usando una cadena de formato como scanf("%d",&x); . Sin embargo, tengo curiosidad por algo de hace unos días, así que estoy haciendo una pregunta.

¿Qué sucede cuando pones un carácter entre comillas de la función scanf ?

Ejemplo:

 printf("Please enter the date you were born: ex.1999/5/6 : ") scanf("%d/%d/%d", &year, &month, &date);
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

scanf lee un flujo de datos de stdin e intenta analizar su cadena de formato. Si no encaja, deja de procesarse. Es importante comprender que el resto de la entrada permanece en el flujo stdin para lecturas posteriores. scanf devuelve el número de valores que se han analizado con éxito.

Según mi experiencia, lo mejor es escribir un pequeño programa y probar el comportamiento por ti mismo:

 #include "stdio.h" void main() { int year = 0; int month = 0; int date = 0; int count; while (1) { printf("enter data:\n"); count = scanf("%d/%d/%d", &year, &month, &date); printf("data received:\n"); printf("%d-%d-%d count=%d\n", year, month, date, count); } }

Ejemplo 1: Comience de nuevo e ingrese los datos correctos:

 enter data: 1/2/3 data received: 1-2-3 count=3

Ejemplo 2: Empezar de cero e introducir datos erróneos:

 enter data: 1 2 3 data received: 1-0-0 count=1 enter data: data received: 2-0-0 count=1 enter data: data received: 3-0-0 count=1

Puede ver que scanf lee los datos solo hasta el espacio después 1 porque no se ajusta a la cadena de formato. scanf solo cambia el valor de la primera variable. Aún así, el resto de su entrada, que es 2 3 , está en stdin . El ciclo continúa y la siguiente llamada a scanf lee 2 . Se omite el espacio delante del número. ¡Esto sucede sin ninguna interacción del usuario! De nuevo, no se encuentra ninguna barra. Y así. Pruébelo usted mismo con diferentes casos y comprenda que usar scanf es algo peligroso ... y si no inicializa las variables y el análisis falla, ¡obtendrá datos no inicializados!

over 4 years ago · Santiago Trujillo Relatório

0

¿Qué sucede cuando pones un carácter entre comillas de la función scanf?

Hace que la función omita una aparición de ese carácter exacto del flujo de entrada, siempre que el siguiente carácter que se lea sea una coincidencia. Si el siguiente carácter no coincide, la llamada a scanf fallará en ese punto.

De cppreference :

La cadena de formato consta de

  • caracteres multibyte sin espacios en blanco excepto %: cada uno de estos caracteres en la cadena de formato consume exactamente un carácter idéntico del flujo de entrada, o hace que la función falle si el siguiente carácter en el flujo no se compara igual.

Entonces, considere lo siguiente:

 int i, j; int count = scanf("%dbob%d", &i, &j);

Para una entrada de 1bob2 , esto leerá con éxito los valores de 1 y 2 en i y j , respectivamente (omitiendo los 3 caracteres bob ), y el valor de count devuelto será 2 .

Sin embargo, para una entrada de 1Bob2 , el 1 se leerá en i y luego la llamada fallará, porque el siguiente carácter ( B ) no es b , y el valor de count devuelto será solo 1 . Lo mismo ocurrirá con 1bOb2 y 1boB2 .

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda