Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Program do przyjmowania danych osobowych

Mikol22 01 Paź 2016 16:45 918 17
  • #1 01 Paź 2016 16:45
    Mikol22
    Poziom 3  

    Witam chciałbym napisać program który będzie działał na podobnej zasadzie:

    Podaj swoje imię ? Jan Michał
    Podaj swoje nazwisko ? Kowalski
    Podaj swoją ocenę ? 5
    Podaj swój wiek ? 30

    Nazwisko: Kowalski, Jan Michał
    Ocena: 4
    Wiek : 30

    Potrzebuje aby zmienna odpowiedzialna za Ocenę była w zakresie od 6 do 2. Czy da się to zrobić bez instrukcji warunkowej ?
    Na chwilę obecną mam tyle napisane

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Czy da się jakoś zapobiec białym znakom operując jedynie na zmiennych int ? Dodam że próbowałem z funkcji cin.get(); ale to nie pomaga

    0 17
  • #3 01 Paź 2016 19:17
    Mikol22
    Poziom 3  

    JacekCz napisał:
    http://www.cplusplus.com/reference/istream/istream/ignore/

    Może być zbieżne z Twoim pytaniem (nie jestem pewien czy je rozumiem)

    No nie zbyt to mi pomaga ponieważ gdy użyje spacji no jest już po zawodach.. gdybym działał na zmiennej char i używał tablicy to nie ma problemu używam po prostu cin.getline(). A gdybym użył typu string to da się zapobiec występowaniu białych znaków gdy użyje spacji przy jednej zmiennej ?

    0
  • #4 01 Paź 2016 19:23
    JacekCz
    Poziom 36  

    Mikol22 napisał:
    JacekCz napisał:
    http://www.cplusplus.com/reference/istream/istream/ignore/

    Może być zbieżne z Twoim pytaniem (nie jestem pewien czy je rozumiem)

    No nie zbyt to mi pomaga ponieważ gdy użyje spacji no jest już po zawodach.. gdybym działał na zmiennej char i używał tablicy to nie ma problemu używam po prostu cin.getline(). A gdybym użył typu string to da się zapobiec występowaniu białych znaków gdy użyje spacji przy jednej zmiennej ?


    Nie wiem czy rozumiem
    a) z zewnątrz strumienia nie ma kontroli co user wpisze, bo to we władzy systemu operacyjnego (konsola, DOS itd)
    b) wewnątrz można pobierać linie do std::string i samemu je analizować. Mozna zrobić jak się chce (dlaczego pytasz o instrukcje warunkowe???).
    Pobieranie linii nie powinno sie użytecznością różnić do char[] i do std::string. Czy ja nie rozumiem pytania, może???

    0
  • #5 01 Paź 2016 19:31
    Laurefinwe
    Poziom 6  

    Nie ma sensu sprawdzać, czy zmienna mieści się w skali ocen inaczej, niż przy użyciu instrukcji warunkowej. Wydaje mi się, że nie ma żadengo innego prostego sposobu na sprawdzenie wartości. Co do wczytywania nie pomogę, bo sam piszę głównie w czystym C i załatwiłbym to przy pomocy stdin.

    0
  • #6 01 Paź 2016 19:36
    JacekCz
    Poziom 36  

    Laurefinwe napisał:
    Co do wczytywania nie pomogę, bo sam piszę głównie w czystym C i załatwiłbym to przy pomocy stdin.


    Masz te same możliwości, musisz wcześniej czy później od systemu przyjąć wszystkie napisane literki, na to nie ma mocnych.

    Dopiero na ioctl (podwójnie głębszy, zupełnie nieprzenośny sposób) można trochę "dyskutować" z systemem operacyjnym.

    0
  • #7 01 Paź 2016 21:57
    Mikol22
    Poziom 3  

    Okej mam teraz inne pytanko potrzebuje wprowadzić dane do programu tak aby nie powstawiały białe znaki czy da to się zrobić za pomocą zmiennych string ? O to kod programu

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Ok nie ma problemu gdy wprowadzimy imię i potem deser to wszystko gra ALE gdy chce wprowadzić imię i użyć spacji to potem powstaje biały znak który powoduje że nie mogę wprowadzić zmiennej deser.. dodam że cin.getline() nie działa...

    0
  • #8 01 Paź 2016 22:15
    JacekCz
    Poziom 36  

    Mikol22 napisał:

    Ok nie ma problemu gdy wprowadzimy imię i potem deser to wszystko gra ALE gdy chce wprowadzić imię i użyć spacji to potem powstaje biały znak który powoduje że nie mogę wprowadzić zmiennej deser.. dodam że cin.getline() nie działa...


    No właśnie to ignore(.) by miało być. Mało dzióbię na konsoli (strumieniach) ale tak jest opisywana ta funckja

    0
  • #9 03 Paź 2016 17:52
    Mikol22
    Poziom 3  

    Nie zakładając nowego tematu potrzebuje teraz aby program przyjmował dane w strukturach :D o to mój kod

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Program wywala mi błędy.. może mi ktoś powiedzieć gdzie jest tutaj błąd ?

    0
  • #10 03 Paź 2016 17:59
    JacekCz
    Poziom 36  

    Mikol22 napisał:

    Program wywala mi błędy.. może mi ktoś powiedzieć gdzie jest tutaj błąd ?


    Wyłącznie Ty możesz powiedzieć.
    Może by łaskawie je zamieścić? A u Ciebie nawet kursor się ustawi GDZIE
    Błedy zawsze się mogą zdarzyć, to elementarz kogoś kto aspiruje do bycia programistą.

    Mikol22 napisał:

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Koleś widzę znalazłeś w sieci dwa ni od Sasa, ni od Lasa fragmenty kodu ...
    Zmusza Cię ktoś do tego programowania, że sam siebie oszukujesz?

    0
  • #11 03 Paź 2016 18:09
    Mikol22
    Poziom 3  

    Sam go napisałem :)

    Dodano po 2 [minuty]:

    ||=== Build: Debug in ff (compiler: GNU GCC Compiler) ===|
    C:\Programy\ff\main.cpp||In function 'int main()':|
    C:\Programy\ff\main.cpp|14|error: expected '}' before ';' token|
    C:\Programy\ff\main.cpp|14|error: invalid user-defined conversion from 'std::basic_ostream<char>' to 'char' [-fpermissive]|
    C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\basic_ios.h|115|note: candidate is: std::basic_ios<_CharT, _Traits>::operator void*() const [with _CharT = char; _Traits = std::char_traits<char>] <near match>|
    C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\basic_ios.h|115|note: no known conversion from 'void*' to 'char'|
    C:\Programy\ff\main.cpp|15|error: 'marka' was not declared in this scope|
    C:\Programy\ff\main.cpp|15|error: expected primary-expression before ',' token|
    C:\Programy\ff\main.cpp|17|error: 'srednica' was not declared in this scope|
    C:\Programy\ff\main.cpp|19|error: 'waga' was not declared in this scope|
    C:\Programy\ff\main.cpp|12|warning: unused variable 'analityk' [-Wunused-variable]|
    C:\Programy\ff\main.cpp|24|error: 'cout' does not name a type|
    C:\Programy\ff\main.cpp|26|error: expected unqualified-id before 'return'|
    C:\Programy\ff\main.cpp|27|error: expected declaration before '}' token|
    ||=== Build failed: 9 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|


    To są błędy jakie mi wywala kompilator

    0
  • #12 03 Paź 2016 18:12
    JacekCz
    Poziom 36  

    Mikol22 napisał:
    Sam go napisałem :)


    To wszystko masz w komuniaktach o błędach.
    Nie generalizuję że totalna kicha (jak już C++ wolał bym std::string a nie char[], źle widziane jest mieszanie języków choć oczywiście możliwe), ale to twoje zadanie upilnować spójności identyfikatorów.

    PS. Ta inicjalizacja z nawiasami klamrowymi to hiper super nowość*) (tzn zależy od wersji standardu C++, wiem że ciągle są takie, które tego nie łykną). A nawet jakby łykał, nie ucz się naraz wszystkiego, bo nie opanujesz.

    *) zawodowców proszę o nie polemizowanie.

    0
  • #13 03 Paź 2016 18:23
    Mikol22
    Poziom 3  

    JacekCz napisał:
    Mikol22 napisał:
    Sam go napisałem :)


    To wszystko masz w komuniaktach o błędach.
    Nie generalizuję że totalna kicha (jak już C++ wolał bym std::string a nie char[], źle widziane jest mieszanie języków choć oczywiście możliwe), ale to twoje zadanie upilnować spójności identyfikatorów.

    PS. Ta inicjalizacja z nawiasami klamrowymi to hiper super nowość*) (tzn zależy od wersji standardu C++, wiem że ciągle są takie, które tego nie łykną). A nawet jakby łykał, nie ucz się naraz wszystkiego, bo nie opanujesz.

    *) zawodowców proszę o nie polemizowanie.

    Ale jak wprowadzam dane do struktury to muszę "Nadać jej nazwę" np
    cin << imie.nazwa; Czy to ma wyglądać tak cin << nazwa;

    0
  • #14 03 Paź 2016 18:27
    JacekCz
    Poziom 36  

    Mikol22 napisał:

    Ale jak wprowadzam dane do struktury to muszę "Nadać jej nazwę" np
    [syntax = c] cin << imie.nazwa;
    [/syntax]



    Jedynym miejscem gdzie w C/C++ "nadajesz nazwę" składowej jest deklaracja klasy. Coś się nie rozumiemy.
    O ile masz doświadczenia z interpreterów, to jest inaczej.


    Błędy są w 90% proste, przeczytaj, ustaw tam kursor, i zareaguj na to, co kompilator się drze.

    0
  • #15 03 Paź 2016 18:59
    Mikol22
    Poziom 3  

    JacekCz napisał:
    Mikol22 napisał:

    Ale jak wprowadzam dane do struktury to muszę "Nadać jej nazwę" np
    [syntax = c] cin << imie.nazwa;
    [/syntax]



    Jedynym miejscem gdzie w C/C++ "nadajesz nazwę" składowej jest deklaracja klasy. Coś się nie rozumiemy.
    O ile masz doświadczenia z interpreterów, to jest inaczej.


    Błędy są w 90% proste, przeczytaj, ustaw tam kursor, i zareaguj na to, co kompilator się drze.

    nie rozumiem do końca tych błędów.. pomożesz :) ?

    0
  • #16 03 Paź 2016 19:10
    JacekCz
    Poziom 36  

    Mikol22 napisał:

    nie rozumiem do końca tych błędów.. pomożesz :) ?


    tego sie (niemal) nie da bez Ciebie przeprowadzić.

    a) IDE ci ustawia kursor, a mi nie
    b) po poprawieniu pierwszego i rekompilacji zaraz się sytuacja zmienia (zwykle polepsza). Ja w to nie wchodzę, nie mam czasu 20 raz odbierać kod / wklejac / analizowac nr linii itd...

    c) wyeliminuj środkową inicjację z klamerkami tj doprowadź do mniej więcej takiego:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Edit: nie wierzę w samodzielność kodu, za duże niezgodności między częściami.

    0
  • #17 03 Paź 2016 19:27
    Mikol22
    Poziom 3  

    JacekCz napisał:
    Mikol22 napisał:

    nie rozumiem do końca tych błędów.. pomożesz :) ?


    tego sie (niemal) nie da bez Ciebie przeprowadzić.

    a) IDE ci ustawia kursor, a mi nie
    b) po poprawieniu pierwszego i rekompilacji zaraz się sytuacja zmienia (zwykle polepsza). Ja w to nie wchodzę, nie mam czasu 20 raz odbierać kod / wklejac / analizowac nr linii itd...

    c) wyeliminuj środkową inicjację z klamerkami tj doprowadź do mniej więcej takiego:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Poprawiłem parę błędów :D program się skompilował i działa :D ale muszę jeszcze dopracować parę rzeczy..

    Dodano po 4 [minuty]:

    A dokładnie gdy wpiszę pierwszą zmienną do tablicy pojawiają się białe znaki... a nie mogę użyć funkcji cin.getline() ponieważ program krzyczy taki błąd
    C:\Programy\ff\main.cpp|15|error: no matching function for call to 'std::basic_istream<char>::getline(char&)'|

    0