Specter Napisano Czerwiec 19, 2018 Autor Zgłoś Udostępnij Napisano Czerwiec 19, 2018 #include <stdio.h> char jeden_znak; while(1) { printf("napisz znak"); scanf("%c",&jeden_znak); printf("%c",jeden_znak); } // program dzialacacy // napisz znak a a napisz znak sadsagfd sadsagfd napisz znak fsaf23jkhbr38u7hdsafjkb4p9sbkjfndwaefsadf fsaf23jkhbr38u7hdsafjkb4p9sbkjfndwaefsadf // koniec // wie ktos dlaczego %c - jako jeden znak i char zna; jako jeden znak wypisuje i pobiera wiecej?? jak to jeden znak?? i pobiera wiecej wie ktos co tu jest grane?? (do pobrania powiedzmy ze to jest & czyli wskanik jagby czyli pamiec wydluza wiecej niz jeden ale printf {%c} jako jeden znak wypisuje wszytkie?? czego to wina?? wie ktos?? drugie pyt char *bla[3] = // lub // char *bla[3]; bla = {"dassafdsa","fdsafdas","adsfasd"}; wypisuje mi bla brak } czy za duzo o } ale czemu jest blad to jet dobrze :(:(:(:( Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Flinch Napisano Czerwiec 20, 2018 Zgłoś Udostępnij Napisano Czerwiec 20, 2018 Wydaje mi się, że do pobrania pojedyńczego znaku służyła funkcja getch(); ewentualnie cin >> c; Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Specter Napisano Czerwiec 20, 2018 Autor Zgłoś Udostępnij Napisano Czerwiec 20, 2018 noczy nie muwie ze nie znam komend i getch tez znam lecz patrzac logncznie char znak; to pojedynczy znak nie char znak[43242] o tym muwie ;] Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Jarema Napisano Czerwiec 21, 2018 Zgłoś Udostępnij Napisano Czerwiec 21, 2018 A gdybyś spróbował napisać jeden_znak[1], lub jeden_znak[2] (żeby zostawić miejsce na NULL-a. Wtedy nie zmieści kilku znaków. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Particle Napisano Czerwiec 22, 2018 Zgłoś Udostępnij Napisano Czerwiec 22, 2018 scanf("%c",&jeden_znak); printf("%c",jeden_znak); Scanf najpierw zapisuje do bufora wszystkie wpisane znaki (po nacisnieciu entera), następnie formatuje bufor by pasował do konkretnego typu zmiennej (jeśli podaliśmy %d - do int, jeśli %c - do char). Scanf nie sprawdza czy przepisywana ilość znaków z bufora zmieści się w zmiennej, czy nie. Jeśli się nie zmieści, to informacje zostają zapisane w losowym miejscu w pamięci. Może się zdarzyć, że zapiszą się w miejscu gdzie np. zawarta jest informacja o innej zmiennej. Jest to bardzo niebezpieczne i często trudne do wykrycia w złożonym programie. :!: I jeszcze jedno: dla printf nie ma znaczenia, gdzie w pamięci została zapisana zmienna, po prostu ją wyświetla. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Particle Napisano Czerwiec 22, 2018 Zgłoś Udostępnij Napisano Czerwiec 22, 2018 char *bla[3] = // lub // char *bla[3]; bla = {"dassafdsa","fdsafdas","adsfasd"}; Dopuszczalne jest tylko char *bla[3] = {"aadfsdf","asdasd","asgg" } , czyli przy deklaracji następuje inicjalizacja zmiennej. Wówczas do tablicy zostaje odpowiednio wpisane i zakonczone znakiem NULL ciągi znaków. Jeśli chcesz zrobić char *bla[3] , a później dopiero wpisać tam wartości to niestetu musisz iść po kolei indeksami: strcpy (bla[0], "sdasdsad"); strcpy (bla[1], "sdsfasfa"); strcpy (bla[2], "ssafasfsa"); lub po wskaźnikach: strcpy (*bla, "sadasfsaf"); strcpy (*(++bla), "sadasfsaf"); strcpy (*(++bla), "sadasfsaf"); Wykorzystuję funkcję strcpy(char* cel, char* źródło) W języku C i C++ nie można przypisać bezpośrednio ciągu znaków do zmiennej typu char*, czyli bla[0] = "cos-tam";, możliwe to jest tylko przy deklaracji. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Particle Napisano Czerwiec 22, 2018 Zgłoś Udostępnij Napisano Czerwiec 22, 2018 getch() umożliwia wczytywanie znaków w sposób niebuforowany. Sama instrukcja wczytuje tylko jeden znak i zwraca jego wartość. By wczytać więcej znaków, trzeba ją powtórzyć np: int znak; int i = 0; char bufor[30]; While( (znak = getch()) != '\n') { bufor[i++] = znak; } Czekamy na znak, wczytujemy znak naciśnięty przez użytkownika, zapisujemy w tablicy i znów... aż do naciśnięcia klawisza Enter Należy włączyć oczywiście plik nagłówkowy <conio.h> Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Specter Napisano Czerwiec 23, 2018 Autor Zgłoś Udostępnij Napisano Czerwiec 23, 2018 Dzienx chlopaki ;D Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Specter Napisano Lipiec 5, 2018 Autor Zgłoś Udostępnij Napisano Lipiec 5, 2018 Tu patrzec tu tu tu :D :P Takie pytanie; unsigned int cos; // znaczy ze bez znaku cos = -1; // ze znakiem nie zgodne printf("%d",cos) // drukuje ze znakiem :!: 8) Wie ktos jak sie przed tym ustrzec ?? :D zeby bylo zawsze bez znaku ;] specjalnie sie wrocilem na forum zeby tu napisac to: nie chce zadnych sposob jak if(liczba_bez_znaku < 0) liczba_bez_znaku * -1 :!: :D tak przy okazji sie zapytam zna ktos lagorytm na sito arystotelesa dobre?? oraz na lsite 2kierunkowa?? bo kurcze robie to i robie i nic :/ Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Nemo Napisano Lipiec 6, 2018 Zgłoś Udostępnij Napisano Lipiec 6, 2018 Czakol: już drugi raz odkąt ja jestem na forum zaczoles nowy topic w zlym dziale. To o co pytales to dotyczy języka C/C++ wiec nie rozumie czemu ten temat jest w tym dziale. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Specter Napisano Lipiec 6, 2018 Autor Zgłoś Udostępnij Napisano Lipiec 6, 2018 No wiem no ;] ale qrcze w tedy nie myslalem o tym a ten topic ma juz troche czasu, a skopiowac(przeniesc) nie umiem (nie mam uprawnien do tego), a ze dopiero jak ktos ostanio mi tu wzrocil uwego niew iem ty czy ktos nie chce mi sie szukac :P zaczolem na to zwracac uwage ale topicc byl juz od dawna wiec tylko dopisalem do niego ta notke ... o wiecej ;) wiec odpowiedz ine ;) chyba ze pinolec lub ktos inny przeniesie nie bede mial za zle :) tylko nie usuwac :P poprostu przeniesc :D Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
t0xic Napisano Wrzesień 21, 2018 Zgłoś Udostępnij Napisano Wrzesień 21, 2018 ja to robie w ten sposób if(cos<0) cos*=-1; Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Aberration Napisano Styczeń 8, 2019 Zgłoś Udostępnij Napisano Styczeń 8, 2019 Deklarując zmienną jako unsigned dajesz kompilatorowi do zrozumienia jakich operacji ma używać (np. przy porównywaniu lub przy mnożeniu). Np: int i = -1; //hex = 0xffffffff unsigned int j = -1; //hex = 0xffffffff Jak widać nie ma różnicy pomiędzy binarnymi rozwinięciami tych liczb, a funkcja printf domyślnie uważa, że %d oznacza signed int. Ale jest chyba jakiś format dla unsigned, poszukaj w helpie. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.