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");
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++.
“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.