Witam. Chciałem napisać program dla koleżanki, który zadaje jej pytania, a ona ma na nie odpowiedzieć. Mój problem tkwi w tym, że pętla while w nim zawarta nie funkcjonuje tak jak powinna, a właściwie to nie funkcjonuje. Proszę więc o pomoc w rozwiązaniu problemu.
#include
#include
int main()
{
char odp, odp1, odp2;
int popr;
printf("Krotki tescik sprawdzajacy dla Magdaleny ;)\n");
printf("Bede zadawal pytania, a Ty na nie odpowiadaj! :D\n");
printf("\nIdziesz na taki uklad? [t/n] - ");
if(scanf("%c", &odp)==1 && getchar()=='\n' && odp=='t')
{
printf("No to zaczynamy!!\n");
printf("\nPYTANIE 1:\n");
printf("Co robimy od przyszlego tygodnia?\n");
printf("a. szarlotke?\n");
printf("b. idziemy sie opalac?\n");
printf("c. idziemy do kina?\n");
printf("d. biegamy?\n");
scanf("Odp. %c", &odp1);
while(popr==0);
{
if(odp1=='d'){
printf("Brawo geniuszu!!\n");
popr==1;}
if(odp1=='a'){
printf("...?\n");
popr==0;
}
if(odp1=='b'){
printf("... \n");
popr==0;
}
if(odp1=='c'){
printf("Jezeli stawiasz to czemu nie :D\n");
popr==0;
}
}
printf("bla bla bla ....");
}
else if(odp=='n')
printf("To nie, nara!!\n");
else
printf("Podalas zle dane!!\n");
getch();
return 0;
}
Jest kilka powodów. Zobaczmy co podpowiada kompilator:
A więc, statement has no effect dotyczą ciała warunków w ciele pętli while:
if(odp1=='d') { printf("Brawo geniuszu!!\n"); popr==1; } [/code]
[code=php]popr==1;
Chciałeś przypisać nową wartość, ale == jest operatorem porównania.Takie coś zwróci prawdę, lub fałsz, z którą to wartością nic nie zostanie zrobione. Operatorem przypisania jest =, i to ten znak powinien się tam znaleźć.
Zmiennej odp2 w ogóle nie używasz. To po co ją deklarować?
Dalej zmienna popr zostaje zadeklarowana, lecz nie przypisujesz jej żadnej początkowej wartości. Oczekujesz zapewne tutaj zera, a tu niespodzianka - śmieci. To, że jakimś cudem, zadziała raz, czy dwa, to nie znaczy, że tak będzie zawsze. Tylko zmienne globalne są automatycznie inicjalizowane, a ta taką nie jest. Mimo to, od razu w warunku pętli chcesz sprawdzać jej wartość - nie wolno tak.
I coś, od czym kompilator nie ostrzegł.
while(popr==0);[/code]
Po co CI tu średnik?
while (poprawna!=0) /dopóki poprawna nie równa się zero gdy chcesz sprawdzać jeśli nierówne
Mówiąc poprawnie, dozór pętli, pętla wykonuje kolejne iteracje dopóki dozór jest prawdziwy, to znaczy zmienna o nazwie ‘poprawna’ nie ma wartości zero w tym lub innym znaczeniu (dla niektórych języków oznacza to też null, itp.)
&& - operator OR lub albo
if (a==0) && (a==1)
{
}
Ten operator to koniunkcja, daleko jej do alternatywy zapisanej dwoma pionowymi kreskami. Twój warunek jest co najmniej dziwny, nie da się do niego wejść, bo zmienna ‘a’ nie może być jednocześnie 1 i 0. Operator albo jest zupełnie innym operatorem, jest to alternatywa wyłączająca, to znaczy nie dopuszcza warunku, że obie zmienne jednocześnie są prawdziwe, co najwyżej jedna z nich.
!= - operator negacji - coś nie jest równe
Operator negacji jest po pierwsze operatorem bitowym i jest to tylda. Negacja nie oznacza ze coś nie jest równe tylko każdy bit zostaje zamieniony na przeciwny. Ten przedstawiony powyżej to po prostu nierówność.
Zgadza się chodziło mi o negację w sensie nierówności,nie operacji na bitach,czyli wykonuj dopóty zmienna nie jest równa zero,z tym warunkiem jest tylko przykład,pokazałem jak tego użyć,jasne że powinny być dwie różne zmienne