Specter Napisano Czerwiec 19, 2018 Autor Zgłoś 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
Flinch Napisano Czerwiec 20, 2018 Zgłoś Napisano Czerwiec 20, 2018 Wydaje mi się, że do pobrania pojedyńczego znaku służyła funkcja getch(); ewentualnie cin >> c; Cytuj
Specter Napisano Czerwiec 20, 2018 Autor Zgłoś 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
Jarema Napisano Czerwiec 21, 2018 Zgłoś 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
Particle Napisano Czerwiec 22, 2018 Zgłoś 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
Particle Napisano Czerwiec 22, 2018 Zgłoś 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
Particle Napisano Czerwiec 22, 2018 Zgłoś 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
Specter Napisano Lipiec 5, 2018 Autor Zgłoś 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
Nemo Napisano Lipiec 6, 2018 Zgłoś 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
Specter Napisano Lipiec 6, 2018 Autor Zgłoś 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
t0xic Napisano Wrzesień 21, 2018 Zgłoś Napisano Wrzesień 21, 2018 ja to robie w ten sposób if(cos<0) cos*=-1; Cytuj
Aberration Napisano Styczeń 8, 2019 Zgłoś 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
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.