[C] Problem z pętlą while w programie zadającym pytania

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?

177 dzięki wielkie za pomoc, jesteś wielki!!

Pozdrawiam.

while (poprawna!=0) /dopóki poprawna nie równa się zero gdy chcesz sprawdzać jeśli nierówne

= - przypisanie

== - porównanie

&& - operator OR lub albo

if (a==0) && (a==1)

{

}

!= - operator negacji - coś nie jest równe

Że co? W jakim języku to niby jest? Czy może ja czegoś znowu nie załapałem…

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