Miquel_Fuster

Tratamiento de salto de línea adquiriendo datos en consola

Oct 7th, 2021 (edited)
519
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.14 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. // Debe usarse después de adquirir un escalar o un caracter.
  5. void flush_stdin() {
  6.    while(getchar() != '\n');
  7. }
  8.  
  9. // A usarse después de adquirir una cadena.
  10. // string es la cadena que se ha adquirido.
  11. // erase_new_line si es true convierte el último salto de línea en un carácter nulo,
  12. //                si es false lo deja tal cual está.
  13. void flush_after_get_string(char *string, _Bool erase_new_line) {
  14.    char *c = strrchr(string, '\n');
  15.    if(c) {
  16.       if(erase_new_line) {
  17.          *c = '\0';
  18.       }
  19.    } else {
  20.       flush_stdin();
  21.    }
  22. }
  23.  
  24. int main() {
  25.    int i;
  26.    char c;
  27.    char s[15];
  28.  
  29.    // un escalar: usar flush_stdin()
  30.    printf("int    >> ");
  31.    scanf("%d", &i);
  32.    flush_stdin();
  33.  
  34.    // un carácter: usar flush_stdin()
  35.    printf("\nchar   >> ");
  36.    scanf("%c", &c);
  37.    flush_stdin();
  38.  
  39.    // una cadena: usar flush_after_get_string
  40.    printf("\nstring >> ");
  41.    fgets(s, 15, stdin);
  42.    flush_after_get_string(s, 1); // Prueba a cambiar el 1 por un 0
  43.    puts(s);                      // y ve como se separa la cadena
  44.    puts("fin");                  // (si llegó a adquirir en '\n')
  45. }
Add Comment
Please, Sign In to add comment