• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

tablica char, jak zapisać dwu- członowy tytuł, język ANSI C

Object Storage Arubacloud
0 głosów
259 wizyt
pytanie zadane 25 stycznia 2017 w C i C++ przez cherryza4 Nowicjusz (200 p.)
Cześć, mam do napisania projekt na uczelnię, ok miałam, bo szczęśliwie mogę stwierdzić że udało mi się go napisać, teraz zabieram się za poprawianie błędów, żeby program nie wywalał się przy wpisaniu jakiejkolwiek innej niż oczekiwana komenda.

Mój problem polega na tym- że jednym z poleceń jest wpisanie przez użytkownika tytulu ksiazki- wszystko działa jak należy, kiedy tytuł jest jedno- wyrazowy. Chciałabym jednak aby można było wpisać tam również coś zbudowane z wielu wyrazów. Fragment mojego kodu:

 

printf("Podaj Tytul: ");
    scanf("%s", &zapisz );
    Tytul = (char*)malloc(sizeof(zapisz)+1);
    strcpy(Tytul, zapisz);

printf("Podaj imie autora: ");
    scanf("%s", &zapisz );
    Imie = (char*)malloc(sizeof(zapisz)+1);
    strcpy(Imie, zapisz);

element=(ksiazka*)malloc(sizeof(ksiazka));

    element->dane.Tytul=Tytul;
    element->dane.Imie_a=Imie;

Co zrobić, żeby po wpisaniu jako tytuł np. "Syzyfowe Programowanie" program nie przechodził dalej i nie zapisywał "Syzyfowe" do element->dane.Tytul=Tytul; i co za tym idzie automatycznie "Programowanie" w element->dane.Imie_a=Imie;  .?
Chcialabym miec w zmiennej element->dane.Tytul=Tytul zapisany tytuł "Syzfowe Programowanie"
Mam nadzieję że wyraziłam się jasno. Z góry dziękuję za pomoc. :)

2 odpowiedzi

0 głosów
odpowiedź 25 stycznia 2017 przez bartolinciu Dyskutant (7,580 p.)

Nie wiem czy jest to na 100% poprawne, ale ja używam do tego sztuczki z wyrażeniami regularnymi w postaci:

scanf("%[' '-'~']",bufor);

I akceptuje mi wszystkie znaki drukowalne

0 głosów
odpowiedź 25 stycznia 2017 przez draghan VIP (106,230 p.)

Zanim odpowiem na Twoje pytanie właściwe, ja mam pytanie do Ciebie. :)

    scanf("%s", &zapisz );
    Tytul = (char*)malloc(sizeof(zapisz)+1);
    strcpy(Tytul, zapisz);

W kontekście kodu powyżej, jak masz zdefiniowaną zmienną zapisz?

komentarz 25 stycznia 2017 przez cherryza4 Nowicjusz (200 p.)
struct ksiazka* stworzElement(){        /*tworzenie kolejnych koralikow listy*/
    ksiazka *element;
    char *Tytul, *Imie, *Nazwisko, *Kategoria, zapisz[50];
    system("cls");

 

 printf("NADANO ID ksiazki: %d\n\n", indeks);

    printf("Podaj Tytul: ");
    scanf("%s", &zapisz );
    Tytul = (char*)malloc(sizeof(zapisz)+1);
    strcpy(Tytul, zapisz);

    printf("Podaj imie autora: ");
    scanf("%s", &zapisz );
    Imie = (char*)malloc(sizeof(zapisz)+1);
    strcpy(Imie, zapisz);
 

 

tak to wygląda :)
komentarz 25 stycznia 2017 przez draghan VIP (106,230 p.)

Uwaga porządkowa: kod źródłowy wstawiamy na Forum przy pomocy bloczku "code" przy edycji posta.

W związku z kodem, o który pytałem: sizeof(zapisz) zawsze zwróci stały rozmiar tablicy. Tobie prawdopodobnie chodziło o strlen() w miejsce sizeof.

A przechodząc do Twojego pytania: do wczytywania łańcuchów powinieneś użyć funkcji fgets() - powinieneś podać do niej maksymalny rozmiar oczekiwanego łańcucha, żeby nie przekroczyć rozmiaru zmiennej zapisz - to bardzo ważne ze względów bezpieczeństwa i stabilności Twojego programu.
Wykorzystując tę funkcję masz dodatkowy bonus, bo radzi sobie ona ze spacjami. :)

Podobne pytania

0 głosów
1 odpowiedź 899 wizyt
pytanie zadane 20 stycznia 2016 w C i C++ przez Przypadek Początkujący (420 p.)
0 głosów
2 odpowiedzi 86 wizyt
pytanie zadane 28 marca 2020 w C i C++ przez dominik195k Obywatel (1,030 p.)
0 głosów
1 odpowiedź 2,306 wizyt

92,536 zapytań

141,376 odpowiedzi

319,451 komentarzy

61,920 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...