Exemplo da aula 11 (videoconferência) #23

Open
opened 2025-06-09 22:24:34 -03:00 by blau_araujo · 0 comments
Owner
#include <stdio.h>

void print_stdinbuf_addr(void);
void not_consumed(void);

int main(void) {
    int num;
    int ret;
    char str[10];

    // Ainda não temos um buffer de entrada...
    print_stdinbuf_addr();
    
    printf("Digite um número: ");
    ret = scanf("%d", &num);

    // Depois do 'scanf' o buffer é criado no heap...
    print_stdinbuf_addr();

    not_consumed();

    printf("num = %d\n", num);
    printf("ret = %d\n", ret);

    printf("Digite qualquer coisa e tecle ENTER: ");
    ret = scanf("%9s", str);
    
    // O buffer de entrada continua existindo...
    print_stdinbuf_addr();

    not_consumed();

    printf("str = %s\n", str);
    printf("ret = %d\n", ret);

    // O buffer continua existindo até o fim do programa...
    print_stdinbuf_addr();

    return 0;
}

void print_stdinbuf_addr(void) {
    printf("Endereço do buffer de entrada: %p\n", (void *)stdin->_IO_read_base);
}

void not_consumed(void) {
    char chr;
    printf("Não consumidos: ");
    while (1) {
        chr = getchar();
        printf("0x%02x ", chr);
        if (chr == EOF || chr == '\n') break;
    }
    putchar('\n');
}
```c #include <stdio.h> void print_stdinbuf_addr(void); void not_consumed(void); int main(void) { int num; int ret; char str[10]; // Ainda não temos um buffer de entrada... print_stdinbuf_addr(); printf("Digite um número: "); ret = scanf("%d", &num); // Depois do 'scanf' o buffer é criado no heap... print_stdinbuf_addr(); not_consumed(); printf("num = %d\n", num); printf("ret = %d\n", ret); printf("Digite qualquer coisa e tecle ENTER: "); ret = scanf("%9s", str); // O buffer de entrada continua existindo... print_stdinbuf_addr(); not_consumed(); printf("str = %s\n", str); printf("ret = %d\n", ret); // O buffer continua existindo até o fim do programa... print_stdinbuf_addr(); return 0; } void print_stdinbuf_addr(void) { printf("Endereço do buffer de entrada: %p\n", (void *)stdin->_IO_read_base); } void not_consumed(void) { char chr; printf("Não consumidos: "); while (1) { chr = getchar(); printf("0x%02x ", chr); if (chr == EOF || chr == '\n') break; } putchar('\n'); } ```
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: blau_araujo/cblc#23
No description provided.