DMarlon Studio

Lección 5 · 5 de 20

Leer datos con scanf · C

Pida datos al usuario en C con scanf: palabras con %s, enteros con %d y decimales con %lf, y compruebe cuántos valores se han leído.

C · Leer datos con scanf en DMarlon Studio: el código del ejemplo y su salida en la terminal

`scanf` es lo contrario de printf: lee del teclado según un formato y guarda lo leído en variables. Como necesita saber dónde guardarlo, a los números se les pone & delante: scanf("%d", &age). Qué significa exactamente ese & lo verá en la lección de punteros.

char name[30] reserva sitio para un texto (en la lección 11 verá los textos a fondo). %29s lee una palabra, como mucho de 29 letras, para dejar sitio al final del texto; a los textos no se les pone &.

Ojo con los double: en scanf se leen con `%lf`, aunque en printf se escriban con %f. Un formato puede leer varios valores a la vez: "%d %d" lee dos enteros de la misma línea, y scanf devuelve cuántos ha conseguido leer, aquí 2. Si alguien escribe una letra en vez de un número, devolvería menos, y así puede comprobarlo.

Aquí las respuestas salen del archivo input.txt, como si alguien las tecleara, por eso no aparecen en la salida: solo se ven las preguntas y lo que contesta el programa. En la consola de DMarlon Studio, tras pulsar F9, puede escribirlas usted mismo.

Código · main.c

#include <stdio.h>int main(void) {    char name[30];   // room for a word of up to 29 letters    int age;    double price;    int adults, children;    // %s reads one word. Text needs no &.    printf("What is your name? ");    scanf("%29s", name);    printf("Nice to meet you, %s!\n", name);    // For numbers, &age tells scanf where to store the value.    printf("How old are you? ");    scanf("%d", &age);    printf("In 10 years you will be %d.\n", age + 10);    // %lf reads a double (printf writes it with just %f).    printf("Price of a cinema ticket? ");    scanf("%lf", &price);    printf("One ticket: %.2f euros.\n", price);    // Two numbers on one line; scanf returns how many it read.    printf("Adult and child tickets? ");    int read = scanf("%d %d", &adults, &children);    printf("(scanf read %d numbers)\n", read);    // Children pay half price.    double total = price * adults + price / 2 * children;    printf("%d tickets cost %.2f euros.\n", adults + children, total);    return 0;}

Entrada (lo que se teclea) · input.txt

Lucia
29
8.50
2 1

Salida · cc main.c -o main && ./main

What is your name? Nice to meet you, Lucia!
How old are you? In 10 years you will be 39.
Price of a cinema ticket? One ticket: 8.50 euros.
Adult and child tickets? (scanf read 2 numbers)
3 tickets cost 21.25 euros.

Para recordar

  • scanf lee con el mismo tipo de formatos que printf.
  • Los números llevan &: scanf("%d", &n).
  • Un double se lee con %lf.
  • %29s lee una palabra sin pasarse del tamaño.
  • scanf devuelve cuántos valores ha leído.

Ejercicio

Pida también el número de la sala con %d y escriba al final «Room 4: 3 tickets cost 21.25 euros.». Añada la respuesta a input.txt.