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

Odczytywanie id znaku

Ostatnio zmodyfikowano 2014-05-10 13:56
Autor Wiadomość
Zdziwiony
Temat założony przez niniejszego użytkownika
Odczytywanie id znaku
» 2014-05-10 11:20:02
Witam. Mam taki oto kod:

C/C++
#include <iostream>
#include <conio.h>
#include <windows.h>

using namespace std;

int main()
{
   
    int id_znaku, rozmiar;
    char dane[ 11 ];
    cin.getline( dane, 11 );
    rozmiar = - 1;
    do {
        ++rozmiar;
        id_znaku = dane[ rozmiar ];
        cout << id_znaku << endl;
       
    } while( rozmiar <= 9 );
   
}

Program zwraca mi id znaku, oraz śmieci...
Jak to naprawić?

Proszę Was o pomoc ;)
P-109612
Jacob99
» 2014-05-10 12:21:46
Dlaczego w warunku pętli postawiłeś <=9?
P-109617
Zdziwiony
Temat założony przez niniejszego użytkownika
» 2014-05-10 12:23:54
Bo dzięki temu pętla powtórzy się 10razy, a tyle mam miejsca na przechowanie znaków (nie 11, bo pierwszym elementem tablicy jest 0)

A ma to coś wspólnego, z tymi śmieciami ?
P-109618
Monika90
» 2014-05-10 12:39:21
Dlaczego nie zrobisz tego w prosty sposób?
C/C++
std::string line;
std::getline( std::cin, line );
for( char ch: line )
     std::cout << static_cast < int >( ch ) << '\n';

P-109619
Zdziwiony
Temat założony przez niniejszego użytkownika
» 2014-05-10 12:46:46
main.cpp:10:15: error: range-based 'for' loops are not allowed in C++98 mode

A robię to w ten sposób, bo chcę mieć bezpośredni dostęp do id znaku.

Mogłabyś mi wytłumaczyć co oznacza ten zapis?
for( char ch: line )

I jak zapisać to, żeby się kompilowało :E ?

P-109620
Monika90
» 2014-05-10 12:54:48
main.cpp:10:15: error: range-based 'for' loops are not allowed in C++98 mode
Nie włączyłeś trybu C++11. Kompiluj z flagą -std=c++11, albo poszukaj w IDE opcji C++11 i włącz ją.

for (char ch : line)
{
}

to znaczy: dla każdego znaku ch w kontenerze line zrób to co w { }
Przy czym, to operuje na kopii znaku, jakbyś chciał manipulować znakiem w kontenerze, to byś zadeklarował ch jako referencję, o tak:

for (char& ch : line)
{
}


P-109621
Zdziwiony
Temat założony przez niniejszego użytkownika
» 2014-05-10 13:03:42
Ok dzięki za wytłumaczenie :) Już wszystko działa jak należy.

A jeśli chodzi o mój sposób to znalazłem sposób na te śmieci w trakcie czekania.
Wystarczyło zmienić:
char dane[ 11 ] = { '\0' };
Ale za te śmieci zawsze będzie wywalało NULL'a..., więc twój sposób jest lepszy :)

Dzięki za pomoc!
P-109622
libed
» 2014-05-10 13:56:43
Nie możesz zrobić
char dane[ 11 ] = '\0';
 bo wyłazisz poza tablicę.


C/C++
int main( int argc, char ** argv ) {
    const int length = 11;
    char text[ length ] = { 0 };
    cin.getline( text, length );
    int idx = 0;
    do
    cout << "(" << idx << ")->" << static_cast < int >( text[ idx ] ) << "\n";
    while( ++idx < length );
   
    return 0;
}[ / code ]
P-109624
« 1 »
  Strona 1 z 1