Errores comunes de E/S
Problemas con el búfer y el salto de línea
Errores comunes de E/S es una lección gratuita de C Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C Academy incluye 4 lecciones en total.
Errores comunes de E/S
La entrada y la salida en C tienen algunas trampas clásicas. Conocerlas le ahorrará horas de depuración.
#include <stdio.h>
int main(void) {
printf("Let us study I/O pitfalls\n");
return 0;
}El salto de línea sobrante
Después de scanf("%d", ...), la tecla Intro deja un \n en el búfer. Un %c posterior lee ese salto de línea en lugar de la entrada real.
#include <stdio.h>
int main(void) {
char c = 'A';
printf("Use a space before %%c to skip the leftover newline\n");
printf("c = %c\n", c);
return 0;
}Solución con un espacio
Escribir scanf(" %c", &c) con un espacio inicial indica a scanf que omita primero los espacios en blanco.
#include <stdio.h>
int main(void) {
char c = 'Z';
printf("scanf(\" %%c\", &c) skips whitespace\n");
printf("c = %c\n", c);
return 0;
}Olvidar el signo «&»
Pasar una variable a scanf sin & hace que se escriba en una dirección incorrecta y probablemente provoque un fallo.
#include <stdio.h>
int main(void) {
int n = 9;
printf("Always pass &n, not n, to scanf for an int\n");
printf("n = %d\n", n);
return 0;
}Especificadores incompatibles
Leer un double con %f en lugar de %lf en scanf corrompe el valor. La salida utiliza %f para ambos tipos, pero la entrada es diferente.
#include <stdio.h>
int main(void) {
double d = 2.5;
printf("scanf needs %%lf for double; printf uses %%f\n");
printf("d = %.1f\n", d);
return 0;
}Almacenamiento en búfer de la salida
La salida puede almacenarse en un búfer y no aparecer de inmediato. Terminar con \n o llamar a fflush(stdout) la vacía.
#include <stdio.h>
int main(void) {
printf("Flushed by newline\n");
fflush(stdout);
return 0;
}gets es peligroso
La antigua función gets no comprobaba los límites y se eliminó del C moderno. Use fgets en su lugar.
#include <stdio.h>
int main(void) {
char buf[10];
/* fgets(buf, sizeof buf, stdin); */
buf[0] = 'H'; buf[1] = 'i'; buf[2] = 0;
printf("buf = %s\n", buf);
return 0;
}Desbordamiento de búfer con %s
Un %s sin restricciones en scanf puede escribir más allá de una matriz pequeña. Limítelo con un ancho como %19s.
#include <stdio.h>
int main(void) {
char name[20];
printf("Use %%19s to leave room for the null terminator\n");
name[0] = 0;
printf("name length cap protects buffer\n");
return 0;
}fgets conserva el salto de línea
fgets almacena el salto de línea final. A menudo es necesario eliminarlo.
#include <stdio.h>
#include <string.h>
int main(void) {
char line[] = "hello\n";
line[strcspn(line, "\n")] = 0;
printf("[%s]\n", line);
return 0;
}Ignorar los valores de retorno
No comprobar el valor de retorno de scanf permite que la entrada incorrecta pase inadvertida. Compruébelo siempre.
#include <stdio.h>
int main(void) {
int n = 3;
int items = 1;
if (items != 1)
printf("bad input\n");
else
printf("ok: %d\n", n);
return 0;
}Cómo encaja todo de forma segura
Un patrón sólido consiste en leer con fgets, analizar con sscanf y comprobar el resultado.
#include <stdio.h>
int main(void) {
char line[] = "123";
int n;
if (sscanf(line, "%d", &n) == 1)
printf("parsed %d\n", n);
return 0;
}Comprobación rápida
Compruebe sus conocimientos sobre las dificultades de la E/S.
Repaso: dificultades comunes de la E/S
Ha aprendido a evitar errores comunes.
- Los saltos de línea sobrantes confunden a
%c; use un espacio inicial - Pase siempre direcciones con
& - Use
%lfpara leer valores double - Prefiera
fgetsagetsy limite%s - Compruebe los valores de retorno y vacíe la salida
Preguntas frecuentes
¿La lección «Errores comunes de E/S» es gratis?
Sí — el texto completo de «Errores comunes de E/S» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C Academy, actualiza a CoddyKit PRO. El curso de C Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Errores comunes de E/S»?
Problemas con el búfer y el salto de línea Practicas C Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C Academy?
No se requiere experiencia previa. C Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Errores comunes de E/S»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C Academy?
Sí. Cada lección de C Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Especificadores de formato de printf
- scanf y entrada
- Ancho, precisión y flags
- Errores comunes de E/S