[C] Funkcja kbhit()

franek321
Użytkownik
Użytkownik
Posty: 19
Rejestracja: 24 lis 2012, o 17:52
Płeć: Mężczyzna
Lokalizacja: Gliwice
Podziękował: 11 razy

[C] Funkcja kbhit()

Post autor: franek321 »

Witam, mam następujący problem, pobieram z klawiatury nazwę pliku (mniejsza z tym czego to nazwa), i używam funkcji fgets, ale gdy zostanie ona przepełniona, tzn. gdy ilość liter wpisanych przez użytkownika będzie dłuższa, od maksymalnej ilości podanej w fgets, to reszta liter zostaje w buforze, jak mam sczytać litery z bufora, używam funkcji kbhit() żeby sprawdzić czy w buforze są jakieś litery i zwraca on wartość równą 0.

Kod: Zaznacz cały

printf("podaj nazwe");
fgets(wejscie,20, stdin); /
printf("%d", kbhit());
if(kbhit()==1)
    printf("za długa nazwa");
Może źle używam funkcji kbhit(), czy ona nie współgra z fgets? Jakieś sposoby na rozwiązanie tego?
Ostatnio zmieniony 22 sty 2013, o 20:27 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Ser Cubus
Użytkownik
Użytkownik
Posty: 1406
Rejestracja: 6 maja 2012, o 22:46
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 107 razy
Pomógł: 145 razy

[C] Funkcja kbhit()

Post autor: Ser Cubus »

jeżeli chcesz wczytać resztki, to użyj \(\displaystyle{ cin}\)
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[C] Funkcja kbhit()

Post autor: Althorion »

cin to C++, w C nie występuje.

Co do samego problemu niestety nie pomogę, w conio.h są smoki i nigdy nie zadałem sobie trudu, by je pokonać (zwłaszcza że biblioteka jest nieprzenośna). Możesz chcieć rozważyć wczytywanie znak po znaku przy użyciu getch, one się powinny razem dogadywać.

Osobiście bym jednak starał się korzystać z tego, co oferuje biblioteka standardowa i zrobił to tak jak :

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>

int main()
{
    unsigned int len_max = 128;
    unsigned int current_size = 0;

    char *pStr = malloc(len_max);
    current_size = len_max;

    printf("\nEnter a very very very long String value:");

    if(pStr != NULL)
    {
    int c = EOF;
    unsigned int i =0;
        //accept user input until hit enter or end of file
    while (( c = getchar() ) != '\n' && c != EOF)
    {
        pStr[i++]=(char)c;

        //if i reached maximize size then realloc size
        if(i == current_size)
        {
                        current_size = i+len_max;
            pStr = realloc(pStr, current_size);
        }
    }

    pStr[i] = '\0';

        printf("\nLong String value:%s \n\n",pStr);
        //free it 
    free(pStr);
    pStr = NULL;


    }
    return 0;
}
franek321
Użytkownik
Użytkownik
Posty: 19
Rejestracja: 24 lis 2012, o 17:52
Płeć: Mężczyzna
Lokalizacja: Gliwice
Podziękował: 11 razy

[C] Funkcja kbhit()

Post autor: franek321 »

Dzięki za pomoc, poradziłem sobie już z tym problemem, może nie jest to profesjonalnie zrobione, ale zamiast pobierać funkcją fgets, stworzyłem własną funkcję pobierającą za pomocą getchar.
ODPOWIEDZ