Pinarczuk
Guest
Thu Sep 23, 2004 3:50 pm
Witam.
Czy może ktoś podpowiedzić mi co jest nie tak w moim krótkim kodzie w
CodeVisionAVR. Kod kompiluje się bezbłędnie, konfiguracja jest ok, dlaczego
jednak program nie działa. Czy ktoś może sprawdzić to u siebie na komputerze i
AVRe, bo wydaje mi się że tutaj źle kompiluje CodeVisionAVR.
....
char c;
char buffer[32];
char *s;
....
while (1)
{
//Odbiór stringa
s=buffer;
while(c=getchar()!=0 ){
*s=c;
s++;
}
*s=0;
//Wysłanie stringa
s=buffer;
while( *s != 0 ){
putchar(*s);
s++;
}
}
}
Z góry dzięki za odpowiedź bo męczę się chyba nad tym juz z tydzień.
Pozdrawiam.
--
Wysłano z serwisu OnetNiusy:
http://niusy.onet.pl
czerstwy
Guest
Fri Sep 24, 2004 7:40 am
Pinarczuk napisał(a):
Quote:
while(c=getchar()!=0 ){
powinno być:
while ( (c=getchar()) != 0 )
przy założeniu że chcesz zapisać pobrany znak do zmiennej c i porównać z
zerem, no i jesteś pewien, że ostatni znak będzie zerem
Pozdrawiam
czerstwy
Krzysztof Gawryś
Guest
Fri Sep 24, 2004 9:17 am
Quote:
while (1)
{
//Odbiór stringa
s=buffer;
while(c=getchar()!=0 ){
*s=c;
s++;
}
*s=0;
while(1)
{
s=buffer;
while(c=getchar())
*s++ = c;
*s = 0;
....
Krzysiek
Jan Dubiec
Guest
Fri Sep 24, 2004 9:55 am
Pinarczuk wrote on 23 Sep 2004 18:50:56 +0200:
[.....]
Quote:
AVRe, bo wydaje mi się że tutaj źle kompiluje CodeVisionAVR.
Kompilator to chyba kompiluje poprawnie, problem w tym że nie jest
zbyt dobry ponieważ nie wyrzuca ostrzeżenia na takie coś:
Quote:
while(c=getchar()!=0 ){
Występuje tutaj niejednoznaczność i kompilator generuje kod taki jak to
przewidzieli jego twórcy aczkolwiek nie taki jakiego Ty byś oczekiwał.
Jak mniemam ten wiersz powinien wyglądać tak:
while ((c = getchar()) != 0) {
a ze względu na brak nawiasów kompilator prawdopodobnie potraktował go tak:
while (c = (getchar() != 0)) {
Przyzwoity kompilator natychmiast wyrzuci ostrzeżenie w takim miejscu.
Quote:
Z góry dzięki za odpowiedź bo męczę się chyba nad tym juz z tydzień.
Tydzień? Przez ten czas możnaby spokojnie przeczytać kilka pierwszych
rozdziałów jakiejś dobrej książki o C gdzie są opisane takie rzeczy. :-)
Regards,
/J.D.
Q
Guest
Fri Sep 24, 2004 1:54 pm
Quote:
Tydzień? Przez ten czas możnaby spokojnie przeczytać kilka pierwszych
rozdziałów jakiejś dobrej książki o C gdzie są opisane takie rzeczy.
dokladnie;
polecam koledze nauke _podstaw_ programowania w C;
/oczywiscie na 80486 'lub wyzsze' w np. bc
a nie na avr w cvavr...
Q
Guest
Fri Sep 24, 2004 1:57 pm
Quote:
AVRe, bo wydaje mi się że tutaj źle kompiluje CodeVisionAVR.
poza tym:
cvavr ma code wizarda, sporo przykladow jest na sieci, ...
Jan Dubiec
Guest
Fri Sep 24, 2004 3:32 pm
On Fri, 24 Sep 2004 16:54:29 +0200, "Q" <oink@gazeta.gov.pl> wrote:
[.....]
Quote:
polecam koledze nauke _podstaw_ programowania w C;
/oczywiscie na 80486 'lub wyzsze' w np. bc
a nie na avr w cvavr...
C to jest C. Poprawnie napisany kod w ANSI C [*] da się skompilować
praktycznie każdym współczesnym kompilatorem i będzie on działał
poprawnie. Oczywiście chodzi o kod nie wykorzystujący jakichś cech
lub bibliotek systemowych specyficznych dla danej architektury.
Generalnie należy nauczyć się odróżniać język C od kompilatora tego
języka oraz od bibliotek systemowych. Aha, no i warto również nauczyć
się odróżniać kompilator i linker od IDE. :-)
[*] Oczywiście są inne (tzn. nowsze) standardy C, ale ANSI C jest obecnie
"najmniejszym wspólnym mianownikiem"
Regards,
/J.D.
--
Jan Dubiec, jdx#slackware.pl, mobile: +48 506 790442
Głęboka wiara wymaga płytkiego rozumu i nikłej wiedzy.
J.F.
Guest
Fri Sep 24, 2004 3:48 pm
On 23 Sep 2004 18:50:56 +0200, Pinarczuk wrote:
Quote:
while (1)
{
//Odbiór stringa
s=buffer;
while(c=getchar()!=0 ){
*s=c;
s++;
}
*s=0;
Pomijajac co koledzy slusznie wytkneli, to jeszcze:
a) czy na pewno chcesz zeby program wczytywal dane az
do znaku 00h ? Trudno taki wyslac z peceta.
b) przyzwoitosc nakazuje sprawdzac czy bufor sie nie przepelnia ..
J.