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

Dynamiczna tablica char - usuwa pierwszy znak

0 głosów
1,323 wizyt
pytanie zadane 31 marca 2016 w C i C++ przez Corazzo Obywatel (1,040 p.)

Witam!

Mam problem z dynamiczna tablica char. A mianowicie gdy wpisuje wyraz lub zdanie to gdy chce wyświetlić pojedyncze litery z tej tablicy lub po prostu całą zawartość tablicy to zawsze ucina mi pierwsza literę.

Gdy wypisuje liczbę znaków w tablicy to również jest zawsze mniejsza niż powinna być.

I teraz moje pytanie co jest nie tak?

 

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <conio.h>

using namespace std;

void wypisywanie (char *tab, int ile)
{
    for (int i=0; i<ile; i++)
        {
        cout<<endl<<tab[i]<<endl;
        }
}


int main()
{

    char wyraz;
    cin>>wyraz;

    char *tab;
    tab = new char [wyraz];

    gets (tab);
    //cout<<tab;
    int ile_liter = strlen(tab);
    // cout << ile_liter;


    wypisywanie(tab,ile_liter);

    delete [] tab;

return 0;
}

 

Z góry dziękuje za pomoc.

2 odpowiedzi

0 głosów
odpowiedź 31 marca 2016 przez SellLow Nowicjusz (140 p.)
Witam,

Mam do Ciebie pytanie, dlaczego do tablicy ,,tab" wpisujesz zawartość z tablicy ,,wyraz", a potem i tak wczytujesz do tablicy ,,tab" wartość wprowadzoną przez użytkownika?  Wydaje mi się że lepiej było by to zapisać ,,tab = new char;" , a co do działania programu, to napisałem go w borlandzie i działał bez zarzutu.

Pozdrawiam
komentarz 2 kwietnia 2016 przez Corazzo Obywatel (1,040 p.)
Chodzi Ci o to czemu użyłem funkcji gets??

Ja używam Code Block i niestety cały czas ucina mi pierwszy wyraz.
0 głosów
odpowiedź 31 marca 2016 przez fasadin Użytkownik (650 p.)

Czesc,

Ja do problemu podejde troszke inaczej. Wypisze Ci co uwazam w tym kodzie za zle tak bys mogl sie poprawic na przyszlosc, post moze byc troszke przydlugawy

 

1. Piszesz w C++ to nie mieszaj go w C. To sa dwa rozne jezyki (mimo ze C++ wspiera C). Wiec wszystkie include ktore robisz (oprocz conio.h bo nie jest w standardzie) powinienes napisac cstdio zamiast stdio.h

2. Nie powinienes uzywac funkcji gets. Jest ona niewsperana od C++11 (a juz niedlugo standard C++17 wyjdzie). Zgodnie z dokumentacja

"The most recent revision of the C standard (2011) has definitively removed this function from its specification.
The function is deprecated in C++ (as of 2011 standard, which follows C99+TC3)."

3. Nie ma sensu uzywac char, jest on praktycznie nieuzywany w C++. Od tego mamy string. Jezeli chcesz sie uczyc manipulacji na lancuchach znakowych, to ok mozna jako cwiczenie. Ale zeby uczyc sie zeby znac to nie jest przydatne.

4. Uzywanie golego new i delete to jest antyidom od C++11 (powinno sie uzywac shared_ptr, unique_ptr)

5. Nie ma sensu wklejac zakomentowanego kodu. Jezeli potrzebujesz trzymac poprzednie wersje kodu zainteresuj sie kontrola wersji (github / bitbucket)

6. endl nie sluzy do nowej lini. do tego sluzy "\n". To ze wstawia nowa linie, to nie znaczy ze powinno sie go wszedzie uzywac.

7. Zamiast gets mozesz uzyc cin.getline()

 

a odnosnie bledu, na pierwrzy rzut oka wszystko wyglada ok, najlepiej bedziesz jak uzyjesz debuggera i zobaczysz czemu nie ma pierwszego znaku

komentarz 2 kwietnia 2016 przez Corazzo Obywatel (1,040 p.)
Dziękuje za rady.

A co do używania char w C++ to dobrze o tym wiem. W szkole dali mi po prostu taką pracę domowa.

Podobne pytania

0 głosów
1 odpowiedź 3,058 wizyt
0 głosów
2 odpowiedzi 1,248 wizyt
pytanie zadane 1 grudnia 2018 w C i C++ przez four Użytkownik (720 p.)
0 głosów
2 odpowiedzi 920 wizyt
pytanie zadane 4 października 2018 w C i C++ przez uther1455 Nowicjusz (140 p.)

93,741 zapytań

142,677 odpowiedzi

323,294 komentarzy

63,323 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...