CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Problem z getchar()

Problem z getchar()

dział ogólny

Problem z getchar()

Nowy postprzez nvdante » środa, 25 marca 2015, 14:17

Witam!
Zapisuje dane do tablicy dynamicznej w tej sposób:
KOD cpp:     UKRYJ  
        int a, b;
        cin>>a>>b;

        int *t1=new int[a];

        for (int i=0; i<a; i++)
                {
                        t1[i] = getchar();
                        cout<<t1[i];
                }
 

Dlaczego tuż po naciśnięciu Enter, po zmiennej b, zanim getchar() zacznie pobierać dane, w konsoli wyświetla mi się liczba 10 ( niezależnie od wpisanych zmiennych )? Poza tym taki zapis wyświetla o jeden mniej elementów niż trzeba. Jak ustawię np.: a=6 to 10 się nie pojawia w ogóle i reszta działa ok tylko nie pobieram zmiennej, a potrzebuje. Albo ja czegoś nie widzę, albo coś tu nie gra... to początek kodu, więcej na razie nie ma.
Dodam, że potrzebuję przeczytać strumień znak po znaku i wrzucić do tablicy, mogę inaczej jak ktoś ma pomysł.
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows VistaFirefox

Re: Problem z getchar()

Nowy postprzez Pitek » środa, 25 marca 2015, 15:00

Hej, mnie już troche myśleć nauczyli :? Popatrz... Zadaj sobie pytanie co zwraca getchar ? Wartość dziesiętną podanego znaku z tabeli ASCII... Więc odczytujesz, kod 10 to znak nowej linii. Ten getchar(); łapał u Ciebie enter po podaniu każdego znaku. Wrzuć przed linią z getchar'em to :
KOD cpp:     UKRYJ  
while(getchar()!='\n') {}
Wtedy zignorujesz "entery" i będzie dobrze ;)
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows 7Chrome

Re: Problem z getchar()

Nowy postprzez nvdante » środa, 25 marca 2015, 15:23

Poszło, dzięki.
Ps.: Być może problem z sidebarem też jest banalny i wystarczy pomyśleć, ale jednak pytasz... nie oceniaj :)

Pozdrawiam
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows VistaFirefox

Re: Problem z getchar()

Nowy postprzez Pitek » środa, 25 marca 2015, 15:31

Nie oceniam i nie staram się obrazić, lecz chodzi mi o to że kiedy czasem ktoś bardziej coś podkreśli, zostaje w pamięci na dłużej i owocuje na później. Tak jak mnie uczyli ;)
Cieszę się że pomogłem, trzymaj się 8-)
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows 7Chrome

Re: Problem z getchar()

Nowy postprzez nvdante » środa, 25 marca 2015, 23:00

Jeszcze jedno!
Dlaczego taki kod...
KOD cpp:     UKRYJ  
        int t[3][3];

        for (int i=0; i<3; i++)
                {
                        string linia;
                        getline(cin, linia);
                        unsigned p1=0, p2=0, p3=0;
                        if (sscanf(linia.c_str(), "%u%u%u", &p1, &p2, &p3) == 3)
                                {
                                        t[i][0]=p1;
                                        t[i][1]=p2;
                                        t[i][2]=p3;
                                }
                }
 

...w odpowiedzi daje:
Kod: Zaznacz cały
4234416,208,2293384,
4200558,4200497,156,
-1,6365264,2,

czyli jak widać śmietnik...?
Daje wprowadzane to:
123
123
123
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows 7Firefox

Re: Problem z getchar()

Nowy postprzez Pitek » czwartek, 26 marca 2015, 01:25

Dla takich danych tam nic nie będzie, a ten śmietnik to z pamięci. Wyzeruj tą macierz, natomiast jako dane wejściowe podaj :
1 2 3
4 5 6
7 8 9
Sprawdź jak się zachowa, myślę że dalej sobie poradzisz.
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows 7Chrome

Re: Problem z getchar()

Nowy postprzez nvdante » czwartek, 26 marca 2015, 10:14

Wyzerowałem, ale teraz zamiast śmieci są same zera. Nie wiem dlaczego nie mogę zapisać danych z p1, p2 i p3 do komórek tablicy. Nawet jeżeli na sztywno podstawię, że ma się wpisać 1 to i tak jest 0.
Sprawdziłem wartości pX i wszystkie są puste czyli sscanf nie pobiera danych tak, jak trzeba.
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows VistaFirefox

Re: Problem z getchar()

Nowy postprzez polymorphism » czwartek, 26 marca 2015, 10:58

Jeśli łańcuch "123" chcesz rozbić na trzy wartości odpowiadające poszczególnym cyfrom, wtedy format-string powinien wyglądać tak:
KOD cpp:     UKRYJ  
if (sscanf(linia.c_str(), "%1u%1u%1u", &p1, &p2, &p3) == 3)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Problem z getchar()

Nowy postprzez nvdante » czwartek, 26 marca 2015, 11:11

Rzeczywiście udało się pobrać wszystko prawidłowo i zmienne pX mają właściwe wartości.
Bardzo dziękuję :)
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows VistaFirefox


Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 41 gości

cron