Zdziwiony Temat założony przez niniejszego użytkownika |
Odczytywanie id znaku » 2014-05-10 11:20:02 Witam. Mam taki oto kod: #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 ;) |
|
Jacob99 |
» 2014-05-10 12:21:46 Dlaczego w warunku pętli postawiłeś <=9? |
|
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 ? |
|
Monika90 |
» 2014-05-10 12:39:21 Dlaczego nie zrobisz tego w prosty sposób? std::string line; std::getline( std::cin, line ); for( char ch: line ) std::cout << static_cast < int >( ch ) << '\n';
|
|
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 ? |
|
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) { }
|
|
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! |
|
libed |
» 2014-05-10 13:56:43 Nie możesz zrobić char dane[ 11 ] = '\0'; bo wyłazisz poza tablicę. 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 ] |
|
« 1 » |