• 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

Object Storage Arubacloud
0 głosów
1,035 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ź 2,325 wizyt
0 głosów
2 odpowiedzi 786 wizyt
pytanie zadane 1 grudnia 2018 w C i C++ przez four Użytkownik (720 p.)
0 głosów
2 odpowiedzi 519 wizyt
pytanie zadane 4 października 2018 w C i C++ przez uther1455 Nowicjusz (140 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 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!

...