Portál AbcLinuxu, 9. května 2024 22:02


Dotaz: Ignore '\n'

11.5.2009 17:58 C-coder
Ignore '\n'
Přečteno: 202×
Odpovědět | Admin

Dobry den,

chtel bych se zeptat, jestli je mozny ignorovat '\n' za konzolovym vstupem.

Tedy program si vyzada naplnit premennou i hodnotou 45. scanf("%i", &i); Kdyz uzivatel zada 45<ENTER>, v konzole se automaticky hodi vozik na novej radek. Ja chci zabranit tomu - tedy pokracovat v zadku, jenom aby bola promenna i naplnena a dalsi vystup na stdout zobrazen na tou istou radku.

Dekuju.

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.5.2009 18:13 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Ignore '\n'
Odpovědět | | Sbalit | Link | Blokovat | Admin
Hladaj "nebuferovany vstup"; priprav sa vsak, ze citanie bude znacne zlozitejsie, nakolko budes musiet nejako urcit, kde je koniec nacitavaneho cisla.

Btw, ten preklep s/r/z/ je roztomily. :-)
11.5.2009 18:39 C-coder
Rozbalit Rozbalit vše Re: Ignore '\n'

Dekuji, skusim pohledat. Jinak o jakej preklep se jedna? Nejak jsem zadnej nepostrehl.

11.5.2009 18:41 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Ignore '\n'
... tedy pokracovani v zadku.
Fuky avatar 11.5.2009 22:40 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Ignore '\n'
Odpovědět | | Sbalit | Link | Blokovat | Admin
Příloha:

Případně lze vycházet z následující modifikace ukázkového programu kbhit.c z Linux - začínáme programovat. Vysvětlení začíná na straně 167.

$ ./kbhit
9 = 0x9; 10 = 0xA; 11 = 0xB; 12 = 0xC;

$ cat kbhit.c
#include <stdio.h>
#include <string.h>
#include <termios.h>
#include <term.h>
#include <curses.h>
#include <unistd.h>

#define BUFFER_MAX 6

static struct termios initial_settings;
static struct termios new_settings;    

static void init_keyboard(void)
{                              
    tcgetattr(0, &initial_settings);
    new_settings = initial_settings;
    new_settings.c_lflag &= ~ICANON;
    new_settings.c_lflag &= ~ECHO;  
    new_settings.c_lflag &= ~ISIG;
    new_settings.c_cc[VMIN] = 1;
    new_settings.c_cc[VTIME] = 0;
    tcsetattr(0, TCSANOW, &new_settings);
}

static void close_keyboard(void)
{
    tcsetattr(0, TCSANOW, &initial_settings);
}

int main(int argc, char *argv[])
{
    int c = 0;
    int index = 0;
    int number;
    char buffer[BUFFER_MAX+1];

    init_keyboard();

    while (c != 'q') {
        if (index == 0) {
            memset(buffer, 0, BUFFER_MAX+1);
        }

        if ((((c = getchar()) == '\n')) && (index != 0)) {
            printf(" = 0x%X; ", atoi(buffer));
            index = 0;
            continue;
        }

        if ((index < BUFFER_MAX) && isdigit(c)) {
            buffer[index++] = c;
            putchar(c);
        }
    }

    close_keyboard();
    return 0;
}

-- RÁMO: psí tábor , ETriatlon: Výuka plavání

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.