mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: confreonto tra stringhe

Devo eseguire una matching tra descrizioni non identiche ma similari tra
campi di due tabelle. Qualcuno riesce a fornirmi qualche informazione.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 campi di due tabelle. Qualcuno riesce a fornirmi qualche informazione.
Il C standard non ti fornisce strumenti cosi' evoluti per la ricerca tra 
stringhe simili, ti permette solo di confrontare 2 stringhe e ricevere in 
input un'informazione per capire se sono uguali o quale delle 2 e' 
"maggiore" dell'altra (in genere differenza sull'ultimo carattere che non 
matcha).
Il lavoro e' complesso, in alcuni casi potrebbero tornarti utili le 
espressioni regolari, ma solo se puoi stabilire tu un pattern di ricerca 
(costruirlo a partire dalla stringa che leggi non e' il massimo).
Non so se in rete ci siano algoritmi ad hoc, io proverei una cosa simile 
(non ho fatto conteggi sulla complessita' pero'):
- leggi la prima stringa (pattern)
- leggi la seconda
- costruisci un indice di ricerca per la seconda stringa (solo con le parole 
  che ti interessano, oppure con tutte)
- per ogni parola della prima stringa (che ti interessa) controlli se e' 
  presente nella seconda (indicizzata)
  - per ogni match riscontrato registri il successo.
Penso sia piu' o meno quello che fa' un motore di ricerca, quindi potresti 
guardare i sorgenti di qualcuno di questi (htdig magari).
Non penso che l'algoritmo sia molto diverso da quello che ti ho detto, forse 
l'unica differenza e' che il pattern non deve essere analizzato, ma viene 
gia' fornito correttamente formattato dall'utente... li il grado di 
similitudine e' dato dall'ordine con tui ti ritorna i risultati, tu avendo 
un problema leggermente diverso ritornerai solo un valore numerico che 
rappresenta la similitudine.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

Newsgroup: it.comp.lang.c
Titolo: booleani

Sapreste dirmi se posso utilizzare i valori booleani in C e come, bisogna
importare qualche libreria in particolare?

 importare qualche libreria in particolare?
Col c99 puoi direttamente usare i tipo booleani.
Con versioni precedenti utilizzi il valore 0 (e in caso anche i puntatori a
NULL) come "falso" e tutti gli altri valori come "vero", anche se per
convenzione quando devi indicarlo espressamente usi il valore 1 :)
Per il c99 come principale fonte di studio puoi usare i pdf dei draft dello
standard, che sono gratuiti e liberamente scaricabili.
Cerca su google n937.pdf (per esempio 
awgn.antifork.org/openbook/n937.pdf
),
dovrebbe essere uno degli ultimi draft.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

grazie!
Newsgroup: it.comp.lang.c
Titolo: unsigned e ">"

In un codice che sto prendendo in visione ho trovato qualcosa di simile;
a = b > c;
dove a,b e c sono dichiarati "unsigned".
Mi spiegate cosa vuol dire e a cosa serve precisamente un unsigned "puro" ??
grazie

 a = b > c
a =1 se b  e' maggiore  c e 0 se b minore  c.
Luca
-- 
<<>><<>><<>><<>><<>><<>><<<>><<>><<>><<
Luca Paredi
Computing technical supporter              
Universita' degli Studi dell'Insubria  
<<>><<>><<>><<>><<>><<>><<<>><<>><<>><<

 Luca
Minore uguale se non erro.

Zag wrote:

Si hai ragione.


 Minore uguale se non erro.
mi sa che non avete capito la domanda: Fabbro chiedeva cosa 
sia una variabile definita unicamente unsigned. la risposta 
č che probabilmente il compilatore la interpreta come 
unsigned int (cosě ho trovato nella doc di uno dei miei 
compilatori). non so se sia standard.
ciao.

 grazie
se per pure intendi dire che non è stato specificato altro (qualcosa tipo:
unsigned a;) allora immagino che venga usato il tipo di default "int"
(quindi diventa unsigned int a;)
Per il resto unsigned significa che la variabile che segue è da
considerarsi senza segno (chi l'avrebbe mai detto eh?) ovvero:
// * if(sizeof(int)==4)
se un "int" ha un range di valori che va da -2^31 a 2^31 -1
un "unsigned int" ha un range che va da 0 a 2^32 -1

Fabbro ha scritto:

Sono implicitamente 'unsigned int'.

 e a cosa serve precisamente un unsigned "puro" ??
Cos' è un unsigned "puro" ?
-- 
Horst


Esiste in C89 la regola dell'int implicito, cioè se non è specificato il 
tipo allora è un int(ero). Ma è sempre meglio specificare il tipo (a 
meno che non devi risparmiare i 3 byte della stringa "int" nel file di 
codice sorgente LOL :).
unsigned è un qualificatore di tipo (se non sbaglio si chiama così)., in 
pratica definisce che si tratta di un valore positivo, niente negativi, 
i valori sonovanno da 0 in su.
Solitamente il primo bit è usato per il segno del numero (0 positivo, 1 
negativo), questo comporta che hai molti meno valori a disposizione da 
usare.
IN PRATICA : Se la variabile deve contenere valori positivi dichiarala 
come unsigned, altrimenti no.
-- 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Xoen
Jabber ID : 
xo...@jabber.linux.it
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Newsgroup: it.comp.lang.c
Titolo: [OT] Ide per Dgjpp

Salve a tutti, da qualche tempo
uso djgpp con l'editor Rhide.
C'è qualcuno che sà dirmi se esiste
un altro tipo di editor stile Windows
per djgpp?sul sito delorie non ho trovato
nulla.
Grazie a tutti
Ciao

NEWS/NEWS ha scritto:

puoi benissimo usare altri editor e poi compili il file da riga di comando
-- 
e-mail: 
robiweb...@libero.it
page: 
http://www.robiweb.135.it
"Tre Anelli ai Re degli Elfi sotto il cielo che risplende,
Sette ai Principi dei Nani nelle lor rocche di pietra,
Nove agli Uomini Mortali che la triste morte attende,
Uno per l'Oscuro Sire chiuso nella reggia tetra"
J. R. R. Tolkien - Il Signore degli Anelli
Newsgroup: it.comp.lang.c
Titolo: Socket in linux

Dunque, ho bisogno di un aiuto per un problema che non riesco a
risolvere: devo scrivere un server concorrente che accetta una richiesta
da un client su una porta AFTP (mai sentita!); una volta accettato il
collegamento, il client manda al server il pathname di un file, il
server controlla se questo fa parte di un elenco di nomi file legali(
contenuti in un array di char*) e se il controllo e' positivo, il server
comunica al client la data dell'ultima modifica del file richiesto, la
sua dimensione e il contenuto.
Il mio problema piu' grosso e' che non so come usare la "struct
sockaddr":
nel server dichiaro la socket come:
sd=socket(AF_INET, SOCK_STREAM, 0)
ma poi non so cosa mettere quando faccio la bind:
bind(sd, ????? , sizeof(???????));
Attendo fiducioso un aiuto, grazie a tutti.
Ciao, Luca.
-- 
*******************************************************
       "Dio non e' morto.
        E' vivo e sta lavorando
        a un progetto
        meno ambizioso"
				    graffito anonimo
  Reply to 
bia...@maganet.net
*******************************************************

Consiglio vivamente la lettura della FAQ list di comp.unix.programmer
sui socket: 
RTFM.mit.edu
, /pub/usenet/comp.unix.programmer/ .
-- 
Maurizio Loreti                      
http://wwwcdf.pd.infn.it/~loreti/mlo.html
Un. of Padova, Dept. of Physics - Padova, Italy          
lor...@padova.infn.it

 sockaddr":
	$ info libc
e cerca "socket". Buona lettura! ;)
	Alla prossima,
		Marco

Newsgroup: it.comp.lang.c
Titolo: cercasi sviluppatore softw e hardware

Salve a tutti, cerco un valido collaboratore, da inserire in azienda, la 
richiesta è:
esperto programmatore in c, con capacità di progettazione hw, conoscenza 
controllori ATMEL e MICROCHIP.
Contratto 12 mesi, stipendio molto alto.
Se veramente valido anche possibilità di inserimento con quote societarie.
Non si accettano risposte sul NG, ovviamente per motivi di privacy, 
contattare via e-mail
joyvac...@aim.com
 lasciare il proprio recapito telefonico per essere 
ricontattati.
Nel modo più categorico, preghiamo astenersi perditempo!
SEDE, ROMA

Contratto 12 mesi, stipendio molto alto.
"Molto alto" :-)
Cioč ?

Newsgroup: it.comp.lang.c
Titolo: Come fare ?

Non conosco ancora bene il C , e vorrei chiedere come posso fare per gestire
i dati di con valori che abbiano un range ... per spiegarmi :
        Giorno         Orario
          Lun            7.00-9.00
          Mar           7.30-9.30
--
Grazie e ciao a tutti
(Per favore rispondetemi anche in email)
-----------------------------
mg...@polbox.com
-----------------------------

           Mar           7.30-9.30
Sono due casi diversi. Il primo lo puoi gestire con una cosa del genere:
int main()
{
    typedef enum { Lun, Mar, Mer, Gio, Ven, Sab, Dom } Giorni;
    Giorni g = Gio;
    return 0;
}
Per il secondo invece potresti utilizzare una struttura di questo tipo:
typedef struct
{
    short ore;
    short minuti;
} Ora;
e gestirtela come ti pare.
EMG
Newsgroup: it.comp.lang.c
Titolo: Kill & Signal

Ciao a tutti,
ho un problema con l'utilizzo delle primitive kill e signal che vorrei
usare per far comunicare 2 processi.
Un processo sta eseguendo un ciclo infinito e si deve interrompere
quando un altro processo lo desidera.
Allora pensavo di fare una cosa del genere:
il processo mittente manda una kill(pid_destinatario,SIGINT)
nel processo destinatario c'e'  una signal(SIGINT,handler) che richiama
appunto la funzione handler quando riceve il segnale.
la funzione handler stampa a video una serie di dati .
Il problema e' che non viene mai eseguito l'handler...DOVE SBAGLIO????
Grazie,Marco



beh, premesso che questo sarebbe un argomento relativo a s.o. unix e
non al c in generale, da come dici tu sembra corretto.
hai provato a controllare i vari valori ritornati dalle funzioni per
vedere se é tutto corretto?
cod

 ha scritto nel messaggio
news:3B5FE6C3...@tiscalinet.it...


:

ciao prova a usare SIGTERM invece di SIGKILL, se guardi bene SIGTERM fa' la 
stessa cosa di SIGKILL, cioe' uccidere un processo ma SIGTERM non lo fa' in 
modo meno brusco e ti permette di trappare delle tue funzioni con la signal...
ciao
-- 
...FreE FrAGs FOr ALl...
GPQuake Clan Proud Members 
email:ho...@libero.it
 
--------------------------  

 Il problema e' che non viene mai eseguito l'handler...DOVE SBAGLIO????
E' un po' che non gioco con i segnali, ma sei sicuro che SIGINT sia un
segnale gestibile? Lo sai, vero, che ci sono segnali per i quali non si
puo' definire un handler...? :-)
-- 
 Ciao, Bianco.
 Reply to luca.bianco (at) 
tiscalinet.it

 Il problema e' che non viene mai eseguito l'handler...DOVE SBAGLIO????
da man 7 signal:
       Signal     Value     Action   Comment
       -----------------------------------------
       SIGKILL       9       AEF     Kill signal
       The  letters  in  the  "Action"  column have the following
       meanings:
       A      Default action is to terminate the process.
       E      Signal cannot be caught.
       F      Signal cannot be ignored.
ciao
Kronos 
-- 
Home: 
http://kronoz.cjb.net
"Woe to you, Oh Earth and Sea,
 for the Devil sends out the beast with wrath,
 because he knows the time is short...
 Let him who had understanding reckon the number of the beast
 for it is a human number, its number is Six hundred and sixty six."
Revelations ch XIII, b. 18

Newsgroup: it.comp.lang.c
Titolo: Buona sera a tutti...

Sono nuova... c'č qualche paziente che mi spiega come funziona la storia?

 Sono nuova... c'č qualche paziente che mi spiega come funziona la storia?
Quale storia?
EMG

 Sono nuova... c'č qualche paziente che mi spiega come funziona la storia?
Ehm... in che senso?!?!
-- 
 Ciao, Luca.
 Reply to 
luca....@tiscalinet.it
 UIN : 43385135
Newsgroup: it.comp.lang.c
Titolo: conversione doublle - intero





Ciao , chi può 
essere così gentile da darmi una undicazione su come convertire un double in un 
intero decimale senza che si perdano dei pezzi per strada ?


Ho ad esempio 
1.000000 e voglio che mi rimanga 1 e basta.


Ho provato anche con 
i vari casting , solo che alcuni 1 diventano inspiegabilmente 
0.


Dove sbaglio 
?


 


Grazie 
1000000


 


Ciao



 
  wrote in message 
GOEOJEODIIKPINNBKD...@domino-research.it
...


Newsgroup: it.comp.lang.c
Titolo: parsing di un file XML

Ciao a tutti
avrei bisogno di realizzare una funzione in C che preso in ingresso un
file XML di questo tipo:
<?xml version="1.0" ?>
<config>
       <plugin>
          <path>path1</path>
          <filename>nome1</filename>
       </plugin>
       <plugin>
          <path>path2</path>
          <filename>nome2</filename>
       </plugin>
       <plugin>
          <path>path3</path>
          <filename>nome3</filename>
       </plugin>
</config>
mi restituisca un array di strutture che hanno come elementi path e
filename.
Visto che sono un po' a digiuno di parsing XML in C chiedo vostro
aiuto...
Non so che libreria mi convenga usare, ho guardato un po' in giro e ho
visto che è molto usata libxml2 (
www.xmlsoft.org
).
Grazie, attendo fiducioso suggerimenti.

 visto che è molto usata libxml2 (
www.xmlsoft.org
).
Io uso quella, e` veloce e portabile.
Luca
-- 
Home: 
http://kronoz.cjb.net
La somma dell'intelligenza sulla terra e` una costante.
La popolazione e` in aumento.

 visto che è molto usata libxml2 (
www.xmlsoft.org
).
tra le tante:
http://www.easysw.com/~mike/mxml/index.php
ciao.

Newsgroup: it.comp.lang.c
Titolo: info riguardo un manuale

io non riesco più a trovare il sito del seguente manuale:
Titolo: Linguaggio C guida alla programmazione (seconda edizione)
Autore: Alessandro Bellini - Andrea Guidi
Editore: McGraw-Hill
alcuni mi dicono cge è chiuso altri che sarà riaperto tra un po ecc.....
fatto sta che io nn ci capisco + niente : )
se qualcuno mi da una semplice informazione avrà la mia + profonda
gratitudine: )
grazie!!!

Leggi qui:
http://www.hyperbook.it/
credo possa accedere solo se hai acquistato il loro libro.
Mi spiace, ciaux

http://www.ateneonline.it/bellini/home.asp

Newsgroup: it.comp.lang.c
Titolo: Lanciare exe al riavvio (Win2000 server)

Salve a Tutti, non ho molta dimestichezza con questo tipo di
problematiche, ma ora ci sono capitato che devo fare?!?!??!!?
Ho la necessità di far partire un file .exe all'avvio del computer,
quindi prima di arrivare alla schermata di log in ( Win 2000 server ).
Una soluzione potrebbe essere un file .bat che lo lanci, ma ora......
1) dove lo " salvo" x fare in modo che parta all'avvio???
2) quale istruzuine devo usare x farlo avviare ( ho trovato molti
metodi, ma non sono esperto, quindi....)
Grazie a tutti anticipatamente.........


Prova a chiedere su it.comp.os.dos o it.comp.os.win.win2000
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

 wrote:

Grazie Giovanni.....
Newsgroup: it.comp.lang.c
Titolo: ringrazio tutti

volevo solo ringraziere tutte le persone che partecipano a questo news devo
dire che ho trovato molte persone disposte ad aiutarmi e grazie a voi sto
riuscendo ad imparare il linguaggio c perche' certe cose purtroppo non si
trovano sui libri.Da parte mia cerchero' di non fare domande che per esempio
sono state gia' fatte oppure cose che leggendo un testo le trovi in 5
secondi.
grazie a tutti

ansimous ha scritto:

Per aiutarti in questo, prova ad usare 
http://groups.google.com
-- 
Andrea Bergia - studente              Linux Registred User #281550
"The one thing we're all waiting for, is peace on Earth and an end to war,
it's a miracle we need, the miracle, the miracle, 
Peace on earth and end to war today,
That time will come one day you'll see when we can all be friends"
Newsgroup: it.comp.lang.c
Titolo: `enum' anonimi

Ciao a tutti
leggendo alcuni sorgenti ogni tanto si incappa in cose del genere:
(GNU gimp 1.2.3, app/layer.c)
        enum
        {
          REMOVED,
          LAST_SIGNAL
        };
dal momento che non si definisce né un tipo né una variabile, a cosa serve 
una dichiarazione del genere? l'unica cosa che posso pensare è che sia 
equivalente ad assegnare 0 a REMOVED e 1 a LAST_SIGNAL, ma a questo punto 
perchè non usare #define?
grazie a chi mi illuminerà...
-- 
Ciao,
[Resnick]

In teoria i due metodi sono equivalenti, pero' il define genera una serie di
problematiche che si risolvono con l'enum.
Il primo problema e' che "define" e' una funzione di preprocessore che
sostituisce fisicamente ad esempio REMOVED con il valore indicato, senza
eseguire nessun controllo. Il compilatore non vede piu' quindi la costante
REMOVED ma un valore numerico. Questo puo' creare problemi nel controllo dei
tipi.
Inoltre "define" non e' locale ma globale, nel senso che sostituisce tutto
in tutto il modulo.
Un esempio di errore e' il seguente:
#define max 16
...
void sort(int a[], size_t max);
che per il compilatore diventa:
void sort(int a[], size_t 16);
che e' evidentemente un errore.
Sul sito Embedded.com c'e' un articolo riguardante le costanti simboliche
che tratta in modo approfondito questa problematica valutando tutti i pro e
i contro delle varie scelte.
L'indirizzo e' : 
www.embedded.com/story/OEG20011016S0116
Ciao
Giuseppe
"[Resnick]" <resTOG...@ciaoTOGLIweb.it> ha scritto nel messaggio
news:ad0260$2kt$1...@pluto.news.dsi.unimi.it...


Newsgroup: it.comp.lang.c
Titolo: è vero che esiste un bug ?

In un news-group non italiano si parlava di un bug che ha rhide editor
di djgpp ??

di djgpp ??
Bhe se esiste un bug li non saprei, ma ti dico che esiste un teorema
che dice che nessun programma oltre l'ordine di 10^4 righe e'
perfettamente esente da bug
Augusto Pucci
Webmaster di Prospektiva On-line
http://go.to/Prospektiva

Newsgroup: it.comp.lang.c
Titolo: utilizzare un puntatore a un puntatore a carattere

se richiamo questa funzione e gli passo come argomento un array di
puntatori (es *char buffer[x]) tutto va bene,
il problema č che ho dovuto rivedere il codice e l'argomento che posso
passargli non č piů un array di puntatori, ma un array (es. char
buffer[x][y]).
E' possibile passare un array (non di puntatori) a una funzione che come
argomento utilizza un puntatore a un puntatore a carattere???
scusate la domanda poco intelligente, ma sto cercando d'imparare questo
linguaggio...
ciao e grazie in anticipo!!!
void xconsolle::cerca_ip(char **pt_ip)
{
     char *_ip_;
     int i=0;
     _ip_ = new char [sizeof(pt_ip)];
     /* scorro l'array fino a quando non č vuoto... */
     while(*pt_ip)
     {
         /* scorro la riga finchč non c'č il blank */
         while(**(pt_ip + i) != ' ')
         {
             *(_ip_ + i) = **(pt_ip + i);
             i++;
         }
         /* chiudo la stringa */
         *(_ip_ + i) = '\0';
         strcpy(buffer_riga[i], _ip_);
         pt_ip++;
     }
}

          /* scorro la riga finchè non c'è il blank */

Newsgroup: it.comp.lang.c
Titolo: programma facile, ma non si compila.

Questo programma "potenza.c" e' corto e facilissimo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
void main()
{
  double potenza=exp(3);
  printf("potenza: %d\n",potenza);
}
eppure quando cerco di compilarlo con
gcc potenza.c
mi viene questo errore:
/tmp/cca005891.o: In function `main':
/tmp/cca005891.o(.text+0xe): undefined reference to `exp'
che e' un errore di linker, perche' se faccio gcc -c potenza.c va tutto
bene (ma non linka).
Eppure a me il programma sembra corretto (sono un principiante...), chi
mi puo' aiutare?
Grazie a tutti in anticipo.

/tmp/cca005891.o(.text+0xe): undefined reference to `exp'
Devi linkare le librerie matematiche con -lm
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
--------------------------------------------------------------
"Partire e' un po' morire e morire e' partire un po' troppo !"
--------------------------------------------------------------

Ok, ti ringrazio molto!

>  printf("potenza: %d\n",potenza);
    printf("potenza: %lf\n", potenza ) ;


 eppure quando cerco di compilarlo con gcc potenza.c mi viene questo
gcc -lm potenza.c
Guido

Newsgroup: it.comp.lang.c
Titolo: pipe

Come posso utilizzare una pipe sotto DOS? Cioč esistono librerie che mi
permettono di mettere in comunicazione 2 programmi tramite le pipe su questo
S.O.? Dove posso trovare qualche spiegazione e/o librerie?

 su questo S.O.? Dove posso trovare qualche spiegazione e/o librerie?
su it.comp.programmare.win32, e chiedendo di _popen
Newsgroup: it.comp.lang.c
Titolo: Help help help

Secondo voi perchè non mi stampa STO QUI ??? eppure mi sembra corretto.....
aiuto..........
while(nomefile[i]!='\n')
   {
   nomefile[i]=fgetc(inputFile);
   printf("%c",nomefile[i]);
   i++;
   }
  nomefile[i]='\0';
  printf("sto qui\n");


boh!
La i la hai inizializzata a 0 prima di inziare il ciclo while ?
sei sicuro che la fgetc ad un certo punto legga '\n' ?
ciao,
g.

Risolto....grazie giovanni.....cmq di sicuro tra un po mi rifaccio
vivo....sto facendo un progetto per l'università da consegnare entro il
19.....
"Giovanni Resta" <g.r...@iit.cnr.it.nospam> ha scritto nel messaggio
news:c5o79t$s1v$1...@newsfeed.cineca.it...



rettifico !
L'errore piu' grosso che commetti e' memorizzare
il carattere letto in nomefile[i],
poi incrementi i e quindi poi quando vai a fare
il test all'inizio della while stai controllando
una posizione nella quale non hai ancora scritto !!!
ciao,
g.

 19.....
Allora era meglio che cominciavi prima... :-)
io non esisto durante il weekend....
In bocca al lupo...
ciao,
g.

 ha scritto nel messaggio
news:59Nfc.128599$Kc3.4...@twister2.libero.it...

La condizione del while viene fatta sempre sull'elemento (i+1)-simo
dell'array nomefile, che non e' ancora stato letto, e quindi sara' difficile
che tu ci possa trovare un '\n', se non per puro caso.
Cosi' a occhio questa roba qua ti va in un ciclo infinito.
Ciao,
Ema

Devo solo sistemare alcune cose....non lo devo fare dall'inizio..
Newsgroup: it.comp.lang.c
Titolo: Stringa

    char buff[BUFF_LENGTH];
    printf("Inserisci un testo: ");
    fgets(buff, BUFF_LENGTH, stdin);
    if (buff[strlen(buff)-1] == '\n') {
        buff[strlen(buff)-1] = '\0';
    }
    printf("La stringa%se' bifronte\n", isBifronte(buff)?" ":" non ");
}
Mi sfugge il significato di buff[strlen(buff)-1]. Perchè è tutto attaccato?
buff è dove l'fgets ha memorizzato l'input ma cosa significa se è tutto 
attaccato a [strlen(buff)-1]?? 

Anolethron ha scritto:

buff e' un array di char, quindi buff[numero] serve per accedere 
all'i+1esimo elemento dell'array. strlen() restituisce un intero quindi 
e' possibile utilizzare il valore che restituisce come indice. Dove sta 
il problema?
-- 
Devaraja (Xdevaraja87^gmail^c0mX)
Linux Registerd User #338167
http://counter.li.org

Oddio che razza di pirla che sono... scusa. 

No, davvero, scusa se scriverò stronzate in questo paio di giorni ma sto 
tentando di familiarizzare con C molto velocemente e inevitabilmente vengono 
fuori queste cose. 

 
Non ti preoccupare, che anche io ho postato tante cazzate ;-)


         buff[strlen(buff)-1] = '\0';
???
Il codice corretto è 
      char buff[BUFF_LENGTH];
      char *p;
      fgets(buff, BUFF_LENGTH, stdin);
      if ( (p=strchr(buff,'\n')!=0 ) *p=0;
 
-- 
Horst

Newsgroup: it.comp.lang.c
Titolo: Interi a 2 o a 4 byte

Perche' il codice prodotto dal compilatore GCC e' piu' veloce utilizzando 
interi da 4 byte (long int, che sono gli int di default) anziche' da 2 
(short int) ????
Ciao
zava...@hotmail.com

(short int) ????
Perchè, al contrario di altri compilatori per DOS, il gcc produce codice per
macchine a 32bit (4 byte) lavoranti in modalità protetta. I programmi
compilati possono infatti girare solo su processori 386 o successivi (quindi
anche gli odierni Pentium)
Ciao, Giuseppe
---------------------------------------------------------------------------
_Guybrush su IRCNet canale #programmazione
---------------------------------------------------------------------------
Newsgroup: it.comp.lang.c
Titolo: undefined reference to `crypt'

Ciao volevo provare il crypt ma ottengo questo errore:
#include <stdio.h>
#include <stdlib.h>
#include <crypt.h>
#include <unistd.h>
int main()
{
    int cryptPw;
    const char *plainPw;
    plainPw = "luca\0";
    cryptPw = crypt(plainPw, "$1$abcdefgh$");
    printf("%d",cryptPw);
}
/home/lucak904/Scrivania/Luca/prog_c/crypt/crypt/main.c|11|undefined
reference to `crypt'|
perchè
Grazie


immagino dovresti linkare con libcrypt
(passa l'opzione -lcrypt al gcc)
Ciao!

Newsgroup: it.comp.lang.c
Titolo: c linux e libreria per visualizzare

Ho letto della libreria curses.h per gestire il video in modalità testo, ma
a parte che non ne vuole sapere di funzionare, volevo chiedere se c'è
qualche altra libreria più semplice, per cancellare lo schermo, posizionare
il cursore etc.
grazie

 [2001-06-18 20:28]:

s-lang
http://space.mit.edu/%7Edavis/
Bye,
 Emmanuele.
-- 
Emmanuele Bassi         |             [ 
http://digilander.iol.it/ebassi/
 ]
emmanue...@iol.it
  |
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4



New curses libraries
   As  soon as  a text  application  needs to  directly control  its
   output to the screen (e.g. wants  to place the cursor at location
   x y  and then  write text),  ncurses is used.  The panel  and the
   forms libraries are included in this package. These new libraries
   support color, special characters and panels.
Da "man ncurses":
       The  ncurses  library  routines  give the  user  a  terminal-
       independent method  of updating  character screens  with rea-
       sonable optimization.  This implementation is  ``new curses''
       (ncurses) and is the  approved replacement for 4.4BSD classic
       curses, which has been discontinued.
Ci ho giochicchiato un pochino, non sembravano male.
-- 
 __                                                               (o_
| _        "The Internet is slow, could you please reboot it ?"   //\
|__|iambo  mailto:
gabr...@giambonini.com
 
www.giambonini.com
   V_/_
Newsgroup: it.comp.lang.c
Titolo: strutture

include<stdio.h>
#include<stdlib.h>
typedef char string[50];
typedef struct
{
  int giorno;
  int mese;
  int anno;
}Data;
typedef struct
{
  Data dataNascita;
  string nome;
  string cognome;
}Impiegato;
int main()
{
     Impiegato dipendenti[10];
     int a = 1;
     scanf("%s",dipendenti[0].nome);
     scanf("%s",dipendenti[0].cognome);
     scanf("%d",dipendenti[0].dataNascita.giorno);<- quì si blocca il prg
     scanf("%d",dipendenti[0].dataNascita.mese);
     scanf("%d",dipendenti[0].dataNascita.anno);
     while(a)
     {
     printf("%s",dipendenti[0].nome);
     printf("%s",dipendenti[0].cognome);
     printf("%d",dipendenti[0].dataNascita.giorno);
     printf("%d",dipendenti[0].dataNascita.mese);
     printf("%d",dipendenti[0].dataNascita.anno);
      a = 0;
     }
     system("PAUSE");
     return 0;
}

Scusate ma ho dimenticato il testo allegato
in pratica non riesco ad inserire anno,mese e giorno tramite scanf(),
e vorrei capire dove sbaglio.
grazie!

 scanf("%d",dipendenti[0].dataNascita.giorno);
scanf("%d",&dipendenti[0].dataNascita.giorno);

fma...@gmail.com
 ha scritto:

grazie per la risposta
p.s. ma solo per i valori interi si utilizza & oppure la spiegazione è 
da ricercarsi nel fatto che dataNascita è una "struttura nella struttura"?
grazie ancora

 da ricercarsi nel fatto che dataNascita è una "struttura nella struttura"?
E' da ricercarsi nel fatto che scanf deve poter modificare il valore del 
parametro, "nome" e "cognome" sono due puntatori a carattere.

 parametro, [fix]
mentre "nome" e "cognome" sono array di caratteri, che in compilazione
decadono a puntatore alla prima cella dell'array (ovvero scrivere
"&nome[0]" oppure scrivere "nome" è la stessa cosa)

Newsgroup: it.comp.lang.c
Titolo: [OT][REQ] Ricorsione in coda

Ciao a tutti,
non riesco assolutamente a capire
quale sia la differenza esatta fra ricorsione
in coda e ricorsione "non in coda"..
Cercavo qualche sito che spiegasse bene
la differenza, ma non ho trovato nulla
di illuminante, sapreste aiutarmi?
grazie,
Blob 

 di illuminante, sapreste aiutarmi?
http://en.wikipedia.org/wiki/Tail_recursion
ciao,
g.


Accidenti, ma ti sembrano dei nomi adatti
per un frammento di codice destinato ad
una persona che ha giŕ le idee poco chiare?
grazie comunque per l'interessamento
ciao,
Blob

 una persona che ha già le idee poco chiare?
un nome e' un nome.
In ogni caso piu' che l'esempio di consiglio
di leggere la pagina su wikipedia.
Comunque se preferisci, questo e' un esempio di
tail recursion per il fattoriale:
double fact(int n, double parz)
{
   if (n<=1) return parz;
   else return fact(n-1,parz*n);
}
double fattoriale(int n)
{
   return fact(n,1.0);
}
ciao,
g.
Newsgroup: it.comp.lang.c
Titolo: cosa condigliate per iniziare a programmare in c su linux?

salve a tutti!!
mi sono da poco munito di un manualone c e ora vorrei iniziare
a provare questo linguaggio.
prima di partire vorrei però definire che editor usare, il compilatore,
e soprattutto a che librerie grafiche appoggiarsi - se ci sono, come credo-.
tenete conto che vorrei partire sul mio pc con linux suse 8.
il discorso librerie grafiche da utilizzare è fondamentale per le pur
semplici applicazioni che ho in mente di fare, cosi come vorrei usare 
solo strumenti completamente open.
grazie a tutti!!!
marco

solo strumenti completamente open.
Allora, innanzitutto ti consiglierei MOLTO di imparare il C standard
prima di pensare a librerie grafiche etc.... 
Infatti sono due problemi piuttosto separati la conoscenza di un
linguaggio e la capaacita' di utilizzare aspetti specifici per un S.O.
Cmq, per gli aspetti standard del linguaggio, chiedi pure qui, ma per
librerie etc (cmq roba che dipende dal S.O.) chiedi su
it.comp.os.linux.developement.
Ciao,
Zeppe

Zeppe wrote:

ok. però nel c standard ho delle librerie molto semplici per disegnare
cerchi, archi e linee?
devo poter disegnare diversi tipi di diagrammi,
non mi serve una grafica eccelsa ma un minimo...
grazie,
marco

cerchi, archi e linee?
No, mi dispiace... l'unica cosa che puoi mostrare a video sono
caratteri... Per quello puoi provare a chiedere sul ng che ti ho
consigliato. Invece, quello che ti dicevo e' che forse se non hai mai
scritto un prog in C i problemi saranno relativi non all'uso delle
librerie, ma a scarsa conoscenza del linguaggio, percio', per separare
le cose, sarebbe meglio prima imparare il linguaggio magari con
semplici programmi di prova, che non richiedono grafica o altro!
Ciao,
Zeppe

 tenete conto che vorrei partire sul mio pc con linux suse 8.
 
  Per iniziare con C & Linux:
 
http://www.lulli.net/WEB/hack/xximparare-c/index.html
  Per le interfacce grafiche, io ti suggerisco Tcl/Tk:
 
http://www.lulli.net/cgi-bin/oz.pl?sub::hack::99tcltk
 
  Non ha nulla a che vedere con il C, ma e' molto veloce
  per sviluppare GUI, cosi' puoi concentrarti sul problema
  ``vero'' e ricercare in C la massima efficienza, 
  preoccupandoti solo in un secondo momento di costruire
  l'interfaccia utente, e senza troppa fatica.
  Ho detto la mia,
  P.
-- 
Unix/Linux Software Development & Tools
 
www.lulli.net
Newsgroup: it.comp.lang.c
Titolo: Operatori bitwise

Salve,
    qualcuno sarebbe coì gentile da spiegarmi cosa sono questi operatori?
Ho comprato una guida dell'apogeo ma non c'è nessun riferimento a tali tipi 
di operatori.
Grazie
Bibop 

Sono operatori per manovrare i BIT delle informazioni.
Esempio:
controllare che il bit più significativo di un char sia uno.
unsigned char *b = ..., ris = 0;
ris = (unsigned char) 127 && b;
ris ora può contenere 128 oppure 0. In questo modo si può sapere se il 
bit più significativo di b fosse o meno settato a 1.
Ci sono quindi degli operatori (in questo caso AND) che sono utili per 
manovrare i singoli bit delle variabili.

 bit più significativo di b fosse o meno settato a 1.
Arrgh, che esempio brutto che hai scelto..
127 && b vale 0 se b punta a NULL e vale 1 altrimenti
inoltre un byte andato logicamente col numero 127 vale sicuramente un
numero minore o uguale a 127.
L'operatore bitwise dell'AND è "&" (una sola), e il fatto che hai scelto
b come puntatore potrebbe complicare un po' le cose da spiegare.
Lo riscriverei cosi:
unsigned char b = ..., ris = 0;
ris = 128 & b;
Ora ris è uguale a 0 se il primo bit di 'b' è 0, vale un numero diverso
da zero se il primo bit è 1
Un altro esempio forse piu esplicativo:
char a = 22; // in binario 00010110
char b = 70; // in binario 01000110
char c = a&b;// and logico 00000110 -> 6
char c = a|b; // or logico 01010110 -> 86
char c = ~b; // not logico 10111001 -> -71 (il primo bit indica il segno)
Oltre a AND OR e NOT esistono anche gli shift per far scorrere i bit a
destra o a sinistra di N posizioni. Ecco un esempio:
char a = 22;  // 00010110
char c = a<<1;// 00101100 -> 44
char d = d>>3;// 00001011 -> 11
char e = ((a&c)|d)<<3)&c); // 00101000.. vabè,mi son divertito abbastanza
In caso di shift a destra per una variabile in cui il primo bit è a uno
non mi ricordo cosa accade di preciso.. ma mi pare di ricordare che se la
variabile è unsigned si aggiungono degli 0, altrimenti il comportamento
non è definito.. ma mi lascio correggere da chi lo sa
Un saluto
Mtc`

Grazie gentilissimi e preparatissimi come sempre.
Bibop 

Occacchio!!!
Volevo dire unsigned char b, e non unsigned char *b.
E poi a quell'ora di notte... m'è risultato difficile scrivere & 
piuttosto che &&...
-- 
Quando noi ignoranti eravamo di più, tutto era più bello...
(A. Celentano)
Per rispondermi in privato, prima togli l'immondizia dalla testa.

 inoltre un byte andato logicamente col numero 127 vale sicuramente un
andato? hi hi
Che strano modo di coniare neologismi :)
Pensavo che se applichiamo questi operatori a qualcosa di "femminile"
diventa andata, orata e nottata :D
Ciao
Newsgroup: it.comp.lang.c
Titolo: Random

Ho trovato la funzione random: vorrei alcune delucitazioni.
1) #include<stdlib.h> è corretto?
2) come si inizializza? Nel senso, devo anche #include<timer.h> per
inizializzare la funzione rand()?
3) come va dichiarata (SE va dichiarata)? Va bene int o void?
Infine, mi sapete fornire una bibliografia decente sul C?
Grazie dell'aiuto
--
Simone Bogi
"La volpe ne sa tante,
una il riccio, importante"
(Archiloco di Paro, V° sec. a.C.)

Grazie dell'aiuto
Di nulla.
Ciao.
############################################
fabi...@inwind.it
Studente di Informatica presso 
l'Università degli Studi La Sapienza
############################################

 Grazie dell'aiuto
Saluti,
-- 
         (__)	      | Nicholas Wieland	    |    -     ------------
	 (oo)	      | 
nicholas...@yahoo.it
   |    -    | There's no |
   /------\/ 	      | Debian GNU/Linux / Mac OS X |    -    | place like |
  / |    ||  	       -----------------------------     -    | *GNOME(2)* |
 *  /\---/\           ...."Have you mooed today?"....    -     ------------

 prima dell'utilizzo di rand.
Si, qui c'ero arrivato: il problema era sapere se dovevo o meno inserire
#include <time.h>
o se poteva fare a meno. Verificato empiricamente (:-)) la risposta è
affermativa, alrimenti il compilatore Borland non l'accetta.

Newsgroup: it.comp.lang.c
Titolo: unterminated character constant

Ciao a tutti...
avrei bisogno di un piccolo aiuto per risolvere il prob che mi dà un
programmino di base che ho fatto per imparare i parametri di conversione
di printf(%d,%c, ecc..)
Se qualcuno mi può dare una mano gliene sarei molto grato  :)
#include <stdio.h>
void get_option(void);
main
{
int choice,chr,flt,str;
 choice = get_option();
 get_option();
 if (choice ==  1)
   { printf("\nDammi un carattere: ");
      scanf("%c", &chr);
     printf("\nHai scelto il carattere %c", chr);
   }
 if (choice == 2)
  {
   printf("\nDammi un numero float: ");
    scanf("%f", &flt);
   printf(\nHai scelto il numero  %f", flt);
  }
 if (choice == 3)
 {
   printf("\nDammi una stringa: ");
    scanf("%s", &str);
   printf("\nHai digitato la seguente stringa: %s", str);
 }
}
int get_option(void)
{
int var;
 printf("Scegli un'opzione:\n\n");
 printf("1)\tDammi un carattere.\n");
 printf("2)\tDammi un numero con virgola.\n");
 printf("3)\tDammi una stringa.\n");
 scanf("%d", &var);
 return var;
}

    printf(\nHai scelto il numero  %f", flt);
Qui manca il punto e virgola iniziale.
EMG

   }


    scanf("%s", &str);
vuoi mettere tutto in degli int.
Ivan Molella
--
Posted from 
laguna.tiscalinet.it
 [195.130.224.86]
via Mailgate.ORG Server - 
http://www.mailgate.org

>    printf(\nHai scelto il numero  %f", flt);
l'errore indicato nel subject e' causato dalla mancanza del <"> prima di
<\n>
al posto di usare if in serie come quelli su "choice" ti consiglio di usare
"switch()"
Ciao
Newsgroup: it.comp.lang.c
Titolo: Network/host byte order endianness

Passando da rete (big-endian) a host (little-endian) ho bisogno di
mappare dei valori a 16 e 32 bit nell'ordine corretto.
Lavoro con un micro processoree embedded. Potrei implementare i
classici htons/l e ntohs/l, ma speravo in qualcosa di più sottile.
Vedo che esistono dei linguaggi (e.g. NesC) che prevedono dei dati
primitivi di tipo "external types", per i quali il compilatore si
arrangia a gestire coerentemente la endianness dipendentemente
dall'architettura (MCU hardware) in cui ci si trova.
Qualcosa del genere è realizzabile in C (GNU GCC).
Grazie in anticipo
RM

 Qualcosa del genere è realizzabile in C (GNU GCC).
Se fosse possibile, sarebbe sicuramente non standard e quindi non portabile.
In questi pochi anni di esperienza di programmazione in C per 
applicazioni embedded, ho alla fine capito l'importanza della 
portabilità nella maggior parte dei casi "normali".

Newsgroup: it.comp.lang.c
Titolo: HELP ! indirizzo memoria video

Salve
ho il seguente problema.
Devo mettere un pixel sullo scrermo.
Per farlo ho ricopiato da un libo il segente codice
unsigned char*ScreenPointer;
ScreenPointer = (unsigned char*) 0x0a0000;
memset(ScreenPointer + ( x + ( y + 320)),color,1);
Compilando con Borland C++ 5 mi da come errore : Costant is long riferito
alla riga dove vi è 0x0a0000;
Qualcuno mi puo aiutare , mi puo dire se l'indirizzo è giusto ho se sbaglio
da qualche parte.
Grazie a tutti
Saluti
Mirko

you wrote :
#unsigned char*ScreenPointer;
#ScreenPointer = (unsigned char*) 0x0a0000;
#memset(ScreenPointer + ( x + ( y + 320)),color,1);
L'indirizzo e' giusto, ma sei sicuro che non ci voglia un bel :
unsigned char far *ScreenPointer = (unsigned char far *)0xa0000 ;
Andrea Laforgia        (
andrea_...@bigfoot.com
)
----------------------------------------------------
There is nothing better for understanding a kangaroo
than seeing it jump.
----------------------------------------------------

...


you wrote :
#NO il far non č necessario... almeno col turbo c++ 3.0 DOS.... non vedo il
#problema..
E allora a che cosa serve ?
Io so che il TC prevede l'uso dei puntatori near e far e che per
default essi sono near...
Per indirizzare la memoria serve un puntatore far...


memset(ScreenPointer + ( x + ( y + 320)),color,1);
Scusa, ma che cavolo di libro è quello che propone del codice del
genere??????
Ciao, Giuseppe
---------------------------------------------------------------------------
_Guybrush su IRCNet canale #programmazione
---------------------------------------------------------------------------
Newsgroup: it.comp.lang.c
Titolo: Cerco libreria gestione stringhe

Sapete dove reperire una libreria free per gestire le stringhe?
Grazie mille.

 Sapete dove reperire una libreria free per gestire le stringhe?
freshmeat.net
, cerca "string" e inizia a guardare tutto cosa ti esce.
Tra le altre cose ti suggerisco le PCRE per il supporto delle espressioni 
regolari stile Perl e Posix (ovviamente sono multipiattaforma).
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

Newsgroup: it.comp.lang.c
Titolo: Password in C

In questi giorni ho realizzato un programma in C per il caro vecchio
Dos che mi permette di proteggere l'accesso ad alcuni file tramite la
digitazione di una password.
Ora il mio problema sta nel momento delle digitazione della password,
io vorrei far al momento della digitazione i caratteri premuti non
vengano visualizzati ma che al loro posto compaiano gli asterischi...
Spero di essere stato abbastanza chiaro...
Qualcuno sa come fare?
Grazie in anticipo per qualsiasi aiuto.

 wrote in message
news:626dc157.04080...@posting.google.com...


 vengano visualizzati ma che al loro posto compaiano gli asterischi...
Prova a dare uno sguardo alle ncurses, qualcosa ci dovrebbe essere
Ciao Max
--
Secondo alcuni autorevoli testi di tecnica Aeronautica,
il calabrone non può volare, a causa della forma e del
peso del proprio corpo in rapporto alla superficie alare. 
Ma il calabrone non lo sa e perciò continua a volare.
                   Igor Sikorsky

 ha scritto nel messaggio
news:626dc157.04080...@posting.google.com...


Newsgroup: it.comp.lang.c
Titolo: [NEWBIE] Intero -> stringa

Esiste per caso una funzione che converta un intero in una stringa (in
pratica, l'opposto di "atoi"), oppure mi devo fare una funziona ad hoc?
Grazie!

> fare una funziona ad hoc?
Oops, volevo dire "funzione"...

 pratica, l'opposto di "atoi"), oppure mi devo fare una funziona ad hoc?
Usa la funzione standard sprintf().
EMG

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
   int number = 12345;
   char string[25];
   itoa(number, string, 10);
   printf("integer = %d string = %s\n", number, string);
   return 0;
}
ciao a auguri
Maurizio
Newsgroup: it.comp.lang.c
Titolo: documentazione

salve a tutti,
vorrei porre una questione forse banale :
     Dove trovo informazioni sulla programmazione win32 con LCC.
ringrazio anticipatamente chiunque possa aiutarmi

     Dove trovo informazioni sulla programmazione win32 con LCC.
LCC e` un compilatore C puro, *NON* C++, quindi ho
settato i followup al solo it.comp.lang.c.
Secondo me il miglior testo introduttivo alla programmazione
Win32 in C e` il Petzold, 5a edizione, uscito da un mesetto o
poco piu` (edito da Microsoft Press); io l'ho ordinato da
www.amazon.co.uk
.  Non ce n'e` ancora una versione in
italiano.  Esistono altri testi, in italiano, ma secondo me
nessuno vale il Petzold.
Un libricino economico e comodo e` il "for dummy - Espresso"
sull'API Win32, purtroppo e` pieno di errori di stampa ed
impaginazione nell'edizione italiana di Apogeo.
E` stato proposto un gruppo di discussione (newsgroup) dedito
alla programmazione di Win32, che si chiamera` qualcosa
come it.comp.programmare.win32 o giu` di li`; ti consiglio
di seguire la probabile futura creazione di questo gruppo (se
ti interessa, potrai votare per esso), che sara` specificamente
dedicato a discussioni di questo tipo.
Io ho iniziato a scrivere un tutorial di API Win32 sulla lista
GIDA (e` appena all'inizio -- 30 soli capitoli -- nonche` al
1o/2o draft) -- spero di ripostarlo se e quando il newsgroup
suddetto verra` creato con un nome almeno semi-decente
(se lo chiamano it.comp.prog.win, o roba del genere, non
mi ci scomodo neppure:-).
Alex
Newsgroup: it.comp.lang.c
Titolo: shift di bit?

Salve a tutti,
oggi mi sono trovato a "dover" fare uno shift di bit
di una parola composta da 58 bit.
Dopo aver provato con >> e << l'errore
del compilatore mi ha indicato che posso fare queste operazioni
solo su interi e loro varianti ( io avevo definito il numero
come double ).
C'e' un modo altrettanto semplice e veloce per fare
questa operazione, oppure devo provvedere a spezzare
la sequenza di bit in sottosequenze?
E' possibile specificare il bit che entra a seguito dello shift
oppure deve essere per forza 0?
Grazie a quanti vorranno rispondermi
Saluti
Marco

oppure deve essere per forza 0?
Shifta e aggiungi 1.
--
Andrea Laforgia - walkietalkie(at)
libero.it
#exclude <windows.h>


Scusa, ma non mi č ben chiara la tua risposta.
Se "shifto" verso sinistra, posso sommare 1 (inserendo a mano un '1' per il
bit meno significativo).
Se invece "shifto" verso destra, non devo sommare 1 ma, per inserire un '1'
nel bit piů significativo devo sommare o 0x8000, per interi a 16 bit, o
0x8000.0000, per gli interi a 32bit.
Ciao
Pietro
--
The pawn is the most important piece on the chessboard...
up to the pawn.

0x8000.0000, per gli interi a 32bit.
E quindi ?

"Andrea Laforgia" <xx...@xxxxx.xxx> ha scritto nel messaggio
news:p9fgjtgakuuum7goo...@4ax.com...

:)
E quindi non sommo sempre uno, come dicevi tu, in maniera indipendente dalla
direzione dello shift.


direzione dello shift.
Sommi 1 al bit che hai shiftato ! il che significa che se shifti
a sinistra hai :
1000 << 1 = 10000 + 
            00001 =
            -----
            10001
Se shifti a destra :
1000 >> 1 = 01000 +
            10000
            -----
            11000

             11000
E qui stiamo sommando 16 al numero shiftato. Lo so che sommo 1 al bit più
significativo, ma l'operazione che sto compiendo è di sommare 16 a tutto il
numero.
Scusa la voglia di puntualizzare il concetto, solo che la tua risposta
iniziale "Shifta e aggiungi 1" mi sembrava potesse generare dei malintesi.
Tutto qui :P
A tal proposito: Mi puoi confermare che lo standard C introduce sempre uno
'0' quando shifto un numero verso destra, sia esso positivo o negativo
(quindi signed).
Grazie e ciao


(quindi signed).
E' una questione dipendente dall'implementazione, anzi, viene
proprio preso ad esempio, dallo standard, per evidenziare il
significato di "implementation-defined behavior".
3.11   
[#1] implementation-defined behavior
unspecified behavior where each implementation documents how
the choice is made
[#2] EXAMPLE  An example of implementation-defined 
behavior is  the  propagation  of  the  high-order  bit when a
signed integer is shifted right.
Newsgroup: it.comp.lang.c
Titolo: Conversione file binario Siemens

Devo convertire per necessità files di immagini Siemens (sono immagini
di diffrazione raggi-X di cristalli) in formato standard (Tiff ad
esempio). L'unica documentazione Siemens dice che il file 
è little endian. L'immagine in scala di grigi, è costituita da un
header ASCII indicante la dimensione immagine e il n° bytes per pixel.
L'header è multiplo di 5 disk blocks per tenere un n° intero di righe
di 80 bytes. C'è un padding per raggiungere un multiplo di 5 disk
blocks costituito da caratteri "." ASCII (puntini). Alla fine del
padding c'è CTRL-Z.
I dati binari sono un byte stream senza delimitatori con 1, 2 ,4 bytes
per pixel, in base a come scritto nell'header. I pixels sono ordinati
come vengono scansiti sullo schermo (il primo pixel nel file è il
primo in alto a sinistra sullo schermo). Inoltre c'è una overflow
table in ASCII per i valori che eccedono il massimo. Costituita da 16
caratteri: 9 per l'intensità e 7 per il pixel # offset.
Non ho molta esperienza di c. Comunque ho scritto una prima parte per
la lettura dell'header per estrarre i dati singolarmente con fscanf.
Tutto OK. Per farlo ho scansito l'header, trovato le stringhe e letto
i valori. Ho usato sopra tutto un ciclo do:
do
	{ 
	c=fscanf(f, "%s", j)
	.....
	} while (c !=EOF);
Dove è il cursore adesso? io penso alla fine dell' header al CTRL-Z.
Come faccio a leggere i dati binari (sono scritti 2 byte per pixel
little endian)? Ottengo solo dati  incomprensibili dalle scansioni
tipo:
	fread(&prova,sizeof(bp),1,f);
dove prova è la struttura e bp = 2  (byte per pixel)
Compilo su Djgpp in ambiente dos.
Grazie millle per la pazienza ciclopica.

Compilo su Djgpp in ambiente dos.
....ancora più strano....cosa intendi per "bp = 2" ??? forse volevi dire
"sizeof(bp) = 2" ???
inoltre se "prova" è una struttura come è dichiarata?? fread scrive un
blocco di byte....non ti aspettare che faccia nulla di più!! il file lo apri
in modo testo o in modo binario?? utilizzi C o C++ ???
...in definitiva non ho capito molto di ciò che hai scritto...
Comunque se non la "sfanghi" fammi sapere.....
Ciao BR66
--
_____________________________________
Email: sostituire "NOSPAM" con "flashnet"
Email: replace "NOSPAM" with "flashnet"