Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: lug-bg: Суров печат на кирилица върху Матричен принер


  • Subject: Re: lug-bg: Суров печат на кирилица върху Матричен принер
  • From: Nikolay Mitev <nikolaymitev@xxxxxxx>
  • Date: Thu, 25 Nov 2004 09:59:50 +0200

Здравейте

Хайде и аз да се обадя, въпреки че малко оффтопик.

Skeleta wrote:

<snip>

--------- текст на програмата: -------

#include <stdio.h>
/*
 (c) Skelet (G. Georgiev) in terms of GNU GPL
 Converts cp1251 -> DOS cyrillic.
*/

int main()
{
 unsigned char w;
 unsigned char First = 0xc0;
 unsigned char Last  = 0xff;
 do {
   w = getchar();
   if (!feof(stdin)) {
    if ((w >= First) & (w <= Last)) w = w-64;

                                   ^^^
Това трябва да е &&, а не &. В случая работи, но по случайност. Защо ли? Ами & е побитова операция, т.е AND-ва *битовете* на левия и десния израз. В случая работи, защото <= и >= са операции, които връщат bool. Сега ще кажете, че то е все тая, ама не е. Има една много съществена разлика м/у & и && и тя е short circuit evaluation. Това означава, че ако левия израз е false, то целия израз няма как да стане true, и съответно десния израз може да не се evaluate-ва. В случая това не ни бърка, но ако десния израз имаше някакъв side-effect (увеличава променлива, вика функция, и т.н), то ще има огромна разлика м/у изпълнението на единия и другия вариант.

Казвам всичко това, защото много, ама много често виждам подобни грешки :-)

Да не говорим, че може да се поопрости малко:

#include <stdio.h>
/*
(c) Skelet (G. Georgiev) in terms of GNU GPL
Converts cp1251 -> DOS cyrillic.
*/

int main()
{
unsigned char w;
unsigned char First = 0xc0;
unsigned char Last  = 0xff;
while (!feof(stdin)) {
  w = getchar();
  if ((w >= First) && (w <= Last)) w -= 64;
  putchar(w);
}
return 0;
}

cheers,
face

============================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html
============================================================================



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.