• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Do..While jak działa.

Object Storage Arubacloud
0 głosów
589 wizyt
pytanie zadane 24 maja 2015 w C i C++ przez Mateep Użytkownik (850 p.)

WItam,

Jak nalezy interpretować tą pętlę.

Do kiedy to nalicza?? wiem , że jest dobrze ale nie bardzo rozumiem dlaczego :(

chodzi o wytłuszczoną część

#include <stdio.h>

int main(){
char zdan[20];
char *w=zdan;
int i=0;


gets(zdan);
do{
    w++;
    i++;
}while(*w);


printf("%d",i);

return 0;
}

4 odpowiedzi

+1 głos
odpowiedź 24 maja 2015 przez Domagalsky Obywatel (1,000 p.)
wybrane 24 maja 2015 przez Harsay
 
Najlepsza
#include <stdio.h>
int main(){ 
char zdan[20]; 
char *w=zdan; 
int i=0;

gets(zdan); 
do{ 
	printf("\n index (i)= %d, adres W= %d, zawartosc W= %c",i,w,*w);
    w++; 
    i++;     
}while(*w);

printf("%d",i);
return 0; 
}

zmienna w jest wskaźnikiem do tablicy znaków zdań.(na początku przechowuje adres 1 elementu tablicy)
Jeżeli chcesz wyświetlić adres jaki w danej chwili przechowuje wystarczy printf(w);
Natomiast jeżeli chcesz wyświetlić wartość, która jest umieszczona pod danym adresem, printf(*w);

Pętla wykona się tyle razy, ilu literowe słowo wprowadzamy.

komentarz 24 maja 2015 przez Harsay Pasjonat (23,640 p.)

Dodam tylko, że pętla przestanie się wykonywać gdy wskaźnik będzie wskazywać na wartość 0 lub w tym wypadku na '\0' czyli tzw. null character (ang. pusty znak)

komentarz 24 maja 2015 przez Domagalsky Obywatel (1,000 p.)
Dokładnie,
wartość 0, \0, NULL, False oznacza fałsz.
wartosc 1, True , oznacza prawdę.
0 głosów
odpowiedź 24 maja 2015 przez niezalogowany
najpierw pętla jest wykonywana a potem sprawdzany warunek

w przypadku while na odwrót
komentarz 24 maja 2015 przez Mateep Użytkownik (850 p.)
chodzi mi o to jak mam interpretować while(*w)? do kiedy to się wykonuje?
komentarz 24 maja 2015 przez Adrian1999 Nałogowiec (34,570 p.)
dopóty jest wskaźnik chyba
komentarz 24 maja 2015 przez Mateep Użytkownik (850 p.)
Dzięki bardzo już rozumiem :)
0 głosów
odpowiedź 24 maja 2015 przez Dorion300 Szeryf (90,250 p.)
Wykonuje pętlę.

Następnie sprawdza warunek.

Jeśli warunek jest prawdziwy zaczyna od nowa.
komentarz 24 maja 2015 przez Mateep Użytkownik (850 p.)
@Dorion300

wiem jak działą ta pętla tylko, że nie wiem jak mam interpretować ten warunek while(*w)
komentarz 24 maja 2015 przez Dorion300 Szeryf (90,250 p.)
Oznacza to że jeśli wskażnik wyjdzie poza tablicę to pętla ma się nie powtarzać.
komentarz 24 maja 2015 przez Mateep Użytkownik (850 p.)
Dzięki bardzo już rozumiem :)
0 głosów
odpowiedź 24 maja 2015 przez MrWeb Stary wyjadacz (10,200 p.)

Czy ten kod nie jest przypadkiem błędny ?

#include <stdio.h>

int main()
{
  char zdan[20];

  char *w = zdan;

  int i = 0;

  //tej funkcji nie powinno się używać,
  //ponieważ można łatwo doprowadzić
  //do przepełnienia bufora, zamiast niej 
  //lepiej będzie użyć fgets()
  //fgets(zdan, 20, stdin);
  gets(zdan);

  do
  {
    w++;
    i++;
  } while(*w); 
  //ten warunek jest błędny
  //bo wykonuje się on dopóki wartość
  //wskazywana przez wskaźnik jest inna
  //od zera, a tak jest prawie zawsze
  //przez co wskaźnik odczytuje nie swoją pamięć
  //wykraczającą poza zakres tablicy zdan[]
  //warto to zamienić na 
  //while(*w != '\0'); dzięki temu pętla wykona się
  //do końca C-Stringa

  printf("%d", i);

  return 0;
}

 

komentarz 24 maja 2015 przez Harsay Pasjonat (23,640 p.)
Pętla przestanie się wykonywać gdy wskaźnik zwróci 0 lub \0.
komentarz 24 maja 2015 przez MrWeb Stary wyjadacz (10,200 p.)
Oh, no tak! Przecież '\0' to nul a to nic innego jak 0!
Ale wtopa, dzięki za przypomnienie :)

Podobne pytania

0 głosów
0 odpowiedzi 105 wizyt
pytanie zadane 17 marca 2022 w C i C++ przez Sway22 Początkujący (270 p.)
0 głosów
2 odpowiedzi 1,374 wizyt
pytanie zadane 2 listopada 2018 w C i C++ przez Rosol Kuba Początkujący (380 p.)
0 głosów
1 odpowiedź 459 wizyt
pytanie zadane 30 marca 2017 w C i C++ przez WireNess Stary wyjadacz (11,240 p.)

92,626 zapytań

141,483 odpowiedzi

319,829 komentarzy

62,006 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...