Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wypisywanie stringa przez funkcję.

Ostatnio zmodyfikowano 2017-11-29 21:11
Autor Wiadomość
EnderstevePL
Temat założony przez niniejszego użytkownika
Wypisywanie stringa przez funkcję.
» 2017-11-29 20:53:37
Witam.
Napisałem funkcję wypisującą ciąg znaków w sposób: "Wypisz znak, czekaj x czasu ,wypisz znak itd.
Niestety po skompilowaniu ciąg się skraca do 5 znaków czego chciałbym koniecznie uniknąć.

Tutaj kod źródłowy funkcji i załączone biblioteki:
C/C++
#include <stdio.h>
#include <string>
#include <windows.h>

void tsw( std::string text, int time ) {
   
    int ts = sizeof( text );
   
    for( int i = 0; i < ts + 1; i++ ) {
        printf( "%c", text[ i ] );
        Sleep( time );
    }
   
}
P-167399
RazzorFlame
» 2017-11-29 21:02:00
1) sizeof(text) nie zwraca liczby znaków, zamiast tego użyj text.length()
2) Kiedy już zmienisz to, warunek pętli ts + 1 spowoduje wyjście poza tablicę, usuń te + 1
3) Wypisywanie znaku powinieneś zrobić za pomocą std::cout:
C/C++
#include <iostream> // potrzebny naglowek

// ... w funkcji, w petli
std::cout << text[ i ];
printf jest funkcją z C, a Ty korzystasz z C++.
4) Zamiast int i powinno być std::size_t i, wtedy masz pewność, że typ będzie zgodny z typem indeksów std::string.
5) Sleep to nie-multiplatformowa funkcja, dostępna tylko na windowsie, zamiast tego użyj:
C/C++
#include <thread>
#include <chrono>

// ... w funkcji, w petli
std::this_thread::sleep_for( time );
Pamiętaj przy tym, żeby zmienić typ argumentu time z int (który w ogóle nie mówi w jakiej jednostce ma być podany) na np. std::chrono::milliseconds.
Wtedy tylko wywołujesz funkcję, np.:
C/C++
tdw( mojString, std::chrono::milliseconds( 100 ) );
P-167400
EnderstevePL
Temat założony przez niniejszego użytkownika
» 2017-11-29 21:11:32
Dzięki za pomoc. :)
P-167401
« 1 »
  Strona 1 z 1