Prosta Pętla w C


(Bagieta) #1

Witam, otóż mój problem polega na tym iż nie moge rozkminić czegoś takiego:

#include 

#include 


int main(int argc, char *argv[])

{

char pyt;


do

{

printf("bla bal bal balba" );

scanf("%c",pyt);

}

while(pyt!="y");


return 0;

}

Chodzi mi oto dopoki nie wstukam y ma powtarzac, a tu nie chce sie kompilowac, ato sie chce ale petla bezwględu na to czy jest y czy nie jest sie zapetla do nieskonczonosci. Ogolnie kompilator Dev-C++ 4.9.9.2 sie dowala

13 C:\Dev-Cpp\main.c [Warning] comparison between pointer and integer 

odnoscie while(pyt!="y");

(Fiołek) #2

Dev-C++ to nie kompilator, to IDE. Kompilatorem jest G++(z pakietu MinGW).

W C/C++/C#/Java/inne, ciąg znaków umieszcza się w cudzysłowu. Ciąg ten zakańczany jest znakiem '\0'. Tworzy się z tego C-String, który to w C i C++ jest jako wskaźnik. W Twoim programie porównujesz znak(char) ze wskaźnikiem(char*). To porównanie prawie zawsze będzie nieprawdziwe. Wskaźnik jest liczbą 32-bitową na x86 lub 64-bitową na x86_64, a char ma tylko 8 bitów. Żeby porównać char z jednym znakiem musisz ten znak "wsadzić" w apostrof. Jeśli chcesz wiedzieć więcej, poczytaj o ciągach znaków w C/C++.


(Atuzar) #3
#include 

#include 


int main(int argc, char *argv[])

{

char pyt;

do

{

printf("bla bal bal balba" );

scanf("%c",&pyt);

}

while(pyt!='y');


return 0;

}

Chyba o to chodzi lub jeśli chcesz wprowadzać znak bez potwierdzenia enterem

#include 

#include 

#include 





int main(int argc, char *argv[])

{

char pyt;

do

{

printf("bla bal bal balba \n" );

pyt=getch();

}

while(pyt!='y');


return 0;

}

(Sawyer47) #4

"y" tworzy C-string, a więc tablicę znaków zakończoną znakiem NULL. Natomiast 'y' to typ znakowy char. No i funkcja scanf przyjmuje adresy/wskaźniki, a więc jak napisał mkwawa powinno być &pyt.