Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

159
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!