mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Possibile in C.?

Ciao a tutti spero che qualcuno possa aiutarmi visto l'esperienza "0" in C.
in pratica ciò che mi servirebbe è una semplice traduzione di alcuni script 
bash in C.
dunque vediamo.. (premetto che ho una RH7.3 )
come tradurre questo
#!/bin/sh
#cominciamo con l'includere il file sottostante che ci renderà disponibile 
#la variabile $IPADDR (contenente l'indirizzo IP della macchina locale) 
#visto che in questa fase dello script `hostname -i` non dovrebbe ancora 
#essere disponibile
source /etc/sysconfig/network-scripts/ifcfg-eth0 
#quindi verifico i permessi di root
id | grep "uid=0(" >/dev/null
if [ $? != "0" ]; then
        echo "Spiacente per eseguire questo script devi essere root";
        exit 1;
fi
# e proseguiamo 
#verifico che named sia installato altrimenti abbandono
if ! which named >> /dev/null 2>&1
then
        echo ""
        echo "                   -- WARNING! --"
        echo ""
        echo "Impossibile proseguire, il server DNS non risulta essere"
        echo "presente nel sistema"
        echo "Procedere con l'installazione di Named per continuare"
        echo "Exiting..."
        echo ""
        exit 1
fi
#verifico il contenuto del file  /etc/hosts
if ! grep -q `hostname` /etc/hosts
  then
echo "127.0.0.1         localhost.localdomain localhost" > /etc/hosts
echo "$IPADDR  `hostname`" >> /etc/hosts
cat /etc/hosts |grep -v `hostname` > /etc/hosts_tmp
echo "$IPADDR                       `hostname` `hostname -s`" >> 
/etc/hosts_tmp
mv -f /etc/hosts_tmp /etc/hosts
fi
### fine ##

****
beh,se nessuno ti ha ancora aiutata,se mi dai una mano,passo per passo 
posso provare a tradurre questo script bash (che conosco a malapena) in
uno script C.
Per questo ti chiedo:
1. # = commenti?
2. echo = stampe a video
3. source?
per il resto credo che mi andrò a leggere un manualetto bash.
ciao,
ALE 
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

...

Scusa ma per quale motivo dovresti aver bisogno di una versione in C????
Costa
Newsgroup: it.comp.lang.c
Titolo: scaricare socket

1) da dove scarico l'ultima versione delle librerie e header socket?
2) esiste un tutorial sulle api di windows che ti spiega l'uso e i parametri
da passare?

 parametri da passare?
MSDN [1]? Non e' un tutorial ma le chiamate alle API di Windows sono
documentate tutte. Qualche tutorial per Windows e' reperibile in rete,
di solito sono abbastanza scadenti. Esiste un libro di Petzold, centrato
soprattutto sull'interfaccia, buono. Mi hanno consigliato anche
Windows Advanced Programming" di Ritcher, ma non l'ho ancora comprato.
Se poi ti interessa capire veramente qualcosa delle socket "Unix network
programming" di Stevens ISBN 0-13-490012-X: niente a che vedere con Windows
ma e' vero un capolavoro.
C:\>iao Angelo
P.S. Ma non ti e' venuto il sospetto che it.comp.programmare.win32
     fosse un NG piu' appropriato?
[1]
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_api_start_page.asp
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 documentate tutte. Qualche tutorial per Windows e' reperibile in rete,
[cut]

 cos'?l'MSDN?
Prova a cercare con google e clickare su "mi sento fortunato" e lo 
scoprirai.
-- 
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."

 cos'è l'MSDN?
Microsoft Developer Network, bastava cliccare sul link in fondo
al post.... :-)
HTH
C:\>iao Angelo


Newsgroup: it.comp.lang.c
Titolo: coem si gestiscono i file in c?

creare un file di testo
cancellarlo
modificare il contenuto
ecc...
mi sapreste aiutare?
grazie.........


I'm not prejudiced, I hate everyone equally.

Newsgroup: it.comp.lang.c
Titolo: [OT] MSDN Originale Vendesi


WOWWWW

 WOWWWW
Complimenti per il quoting e per il cross-post... ma forse non sai 
neanche di che parlo... 8/
-- 
Luc.

"Luc" <XXX...@katamail.comXXX> ha scritto nel messaggio
news:MPG.16cc7ff56...@news.enter.it...

No no.....ricordo qualcosa! Tuttavia forse avrai fortuna maggiore nei
newsgroups che trattano Win32...e non ti innervosire su!
Newsgroup: it.comp.lang.c
Titolo: Ruggine coi **

Ciao a tutti,
ho un piccolo e banale problema: devo effettuare delle conversioni da ** ad 
array solo che, come scritto nell'oggetto, sono un po' arruginito coi 
puntatori a puntatori. Spero, pertanto, che possiate darmi una mano.
Dunque, data questa istruzione
DOC **docs;
dove DOC č una struttura e data una funzione del tipo:
void read_doc(DOC ***docs)
{
    (*docs)=(DOC **) malloc(sizeof (DOC *) *max_docs); /* max_docs la 
conosco a priori! */
   ....
}
poichč conosco max_docs a priori e non ho bisogno di alcuna malloc (vorrei 
un array), come posso convertire queste righe?
Ho fatto qualche tentativo secondo quanto sono i miei ricordi e rileggendo 
le guide a mia disposizione, ma non ho ancora raggiunto un risultato 
positivo.
Grazie anticipatamente
Roberto 

 un array), come posso convertire queste righe?
L'array lo dovresti dichiarare come:
DOC* DOC_array[max_docs];
e quindi puoi scrivere (ma non l'ho testato!)
*docs = DOC_array;
E.

 DOC **docs;
Allora, se vuoi che 'docs' punti a un array di DOC* (cioè punti al primo
elemento di questo array), puoi instanziare l'array localmente (o
globalmente) così:
   DOC*   array[ max_docs ] = {NULL};
 e scrivere:
    docs = array;
Se invece vuoi farlo in una funzione, devi allocare l'array dinamicamente
(con malloc). Se instanzi l'array nello scope della funzione, il suo
lifetime non supererà i confini della funzione.
Max

 globalmente) così:
[CUT]
Non è proprio quello che voglio.
Poichè **docs viene passato chiamando read_doc(&doc)
dove read_dove è:
void read_doc(DOC ***docs)
{
    (*docs)=(DOC **) malloc(sizeof (DOC *) *max_docs); /* max_docs la
conosco a priori! */
   ....
}
vorrei eliminare l'uso della malloc dato che conosco già il valore di 
max_docs
Per far ciò vorrei dichiarare un array
Solo che ho problemi a fare ciò
Magari prima non mi ero spiegato bene. Spero di averlo fatto ora
Ringrazio tutti del tempo dedicatomi.
Roberto 

void read_doc(DOC ***docs)
void read_doc(DOC** p) {
...
}
...
read_doc(array_of_docs);

 read_doc(array_of_docs);
Grazie!
Piů tardi provo e vi faccio sapere

Newsgroup: it.comp.lang.c
Titolo: Algoritmi vari...

Salve,
  volevo sapere se esiste un sito dove si possono trovare algoritmi
classici in c (esempio ricerca, ordinamento, ecc..) e altri di uso comune.
Grazie e ciao
  Matteo
--
Posted from 
smtp2.libero.it
 [193.70.192.52]
via Mailgate.ORG Server - 
http://www.mailgate.org

 classici in c (esempio ricerca, ordinamento, ecc..) e altri di uso comune.
ftp://ftp.cdrom.com/pub/
li trovi "algorithms" o il nome giusto in inglese :)
Newsgroup: it.comp.lang.c
Titolo: Rutina para pasar números a Italiano

 número devuelva una cadena de caracteres con el número en Italiano.
Te podran ayudar con mejor criterio en:
  news:it.comp.lang.c
Il ragazzo supra cerca l'algorismo per passare degli numeri 
agli string in Italiano in extenso, e.g. 3 -> tre, 10 -> dieci, 
20006 -> ventemillasei, etc.
(excusate me, il mio Italiano e d'opereta bufa)
--
  All true believers shall break their eggs at the convenient end.
  news:soc.culture.catalan FAQ at 
http://www.gea.cesca.es/~ipa/SCC/

 número devuelva una cadena de caracteres con el número en Italiano.
Te podran ayudar con mejor criterio en:
  news:it.comp.lang.c
Non credo; praticamente le operazioni da fare dovrebbero essere le stesse
che faresti dovendo scrivere i numero in spagnolo (l'inglese sarebbe un po'
piu' facile, ma non tantissimo).
Saluti,
    Mardy

Newsgroup: it.comp.lang.c
Titolo: AIUTO!

Chi può consigliarmi un bel sito, che contenga un bel po' di SEMPLICISSIMI
(!) programmi in c (che fungano anche in visual c++ 6.0, anche se in univ.
ho Linux)???
Mi sento proprio distrutto dalla sintassi... (%d e non %c...... scanf
sscanf....) sono bloccato... sono solo all'inizio e ho un esame fra
pochissimo.
Vi ringrazio di cuore.
Andrea

(che fungano anche in visual c++ 6.0
Su questo non ci giuro ma, se hai bisogno di programmi semplici,
allora lascia perdere il VC++6.0 e prendi un compilatore semplice
(TurboC da 
www.borland.com
)
ciao

Newsgroup: it.comp.lang.c
Titolo: Aiuto!!!

Ciao a tutti
qualcuno di voi conosce
i seguenti algoritmi?
1) Algoritmo di Horner
2) Operazione Saxpy
3) Algoritmo di exchange sort per ordinamento di un array
4) Ricerca di un elemento in un array ordinato con il metodo di ricerca
binaria
Ah scusate dimenticavo logicamente tutti in linguaggio c
Vi ringrazio anticipatamente

 binaria
Si conosco
Newsgroup: it.comp.lang.c
Titolo: Pipe in Unix

Salve a tutti, ho pensato di rivolgere comunque a questo NG la mia
richiesta, anche se non mi sembra il piu' adatto.
Premesso questo, e mi scuso in anticipo, il mio problema e' un programma che
riesca a mettere in PipeLine n processi passati come argomento
dell'eseguibile.
Il programma funziona con i primi 2, mentre dal terzo in poi non ne vuole
sapere.
Se qualcuno di voi ha qualche consiglio, e' comunque ben accetto.
Mandero' prima possibile il sorgente del programma.
Grazie
                Gioele

Temo che tu sia OT, cosě come lo sono le domande relative a Windows.
Se qualche anima pia lavora sotto Unix e sa la risposta, comunque...
--
Alessandro Monti

 sapere.
Riposto un programmino d'esempio che avevo gia' inviato in un NG
piu' adatto ;)
------------------------------------------------------------------
#include <unistd.h>
#include <sys/wait.h>
int main()
{
        char *comandi[] = { "ls", "sort", "head", "tac" };
        int i, last = 0, tubo[2];
        int len = sizeof comandi / sizeof(char *);
        for (i = 0; i < len; i++) {
                int in = last, out = 1;
                if (i != len - 1) {
                        pipe(tubo); last = tubo[0]; out = tubo[1];
                }
                if (fork() == 0) {
                        if (in != 0) {
                                dup2(in, 0); close(in);
                        }
                        if (out != 1) {
                                dup2(out, 1); close(out);
                        }
                        execlp(comandi[i], comandi[i], (char *) 0);
                } else {
                        close(in); close(out);
                }
        }
        while (i--)
                wait(NULL);
        return 0;
}
------------------------------------------------------------------
Sperando che ti possa servire...
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)
Newsgroup: it.comp.lang.c
Titolo: AIUTO!! Problema (un po' OT)

ciao a tutti!
qualcuno può aoitarmi in questo mio problema?
Si scriva un programma nell?assembly per MIPS, operante sul simulatore  
SPIM,
tale che, prese in input n stringhe (max 20 caratteri), le visualizzi  
dall?ultima
alla prima in lettere maiuscole.
Esempio:
Input:						      Output:
pippo								MINNI
pluto								PLUTO	
minni								PIPPO	
grazie anticipatamente!!
ps: se qualcuno riesce anche a scrivermi una procedura C che possa  
servirmi,
     al max mi metto dietro poi io a tradurla..o almeno ci provo :)
-- 
Using Opera's revolutionary e-mail client: 
http://www.opera.com/m2/

      al max mi metto dietro poi io a tradurla..o almeno ci provo :)
Ovvero tu vorresti che qualcuno ti scriva il programma "C" in maniera
da poter ottenere comodamente l'assembler con un compliatore per MIPS?
Ma non c'e' una maniera piu' comoda per prenderSI per il culo? Tipo
pagare qualcuno che ti faccia direttamente il programma in assembler?
Didatticamente ha la stessa valenza: non serve ad una fava.
C:\>iao Angelo
P.S. Farsi fare le cose dagli altri puo' servire a prendere un voto
     (buono o cattivo che sia), non a capire le cose. Il problema che
     proponi in "C" non e' banale, lo e' di piu'.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 minni                                                         PIPPO
dai , sono buono e te lo scrivo in python:
import string
a='pippo'
print string.upper(a)
adesso puoi pure tradurlo in assembler
ciao

 Il problema che proponi in "C" non e' banale, lo e' di piu'.
Non conosco l'assembly per il mips, ma dubito che sia molto più
difficile... ;-)

 alla prima in lettere maiuscole.
Un problemone.
Newsgroup: it.comp.lang.c
Titolo: Rimuovere l'ultimo carattere da un file

Ciao a tutti, ho scritto un programma che all'interno di un ciclo
scrive in un file una linea composta da tre interi e un \n per ogni
passo del ciclo con l'istruzione fprintf(fout,"%f %f %f\n",a,b,c).
Quindi, quando chiudo un file ho come ultimo carattere un \n (che vedo
in kate, infatti il file finisce con una riga vuota).
Successivamente, con un ciclo while(!(feof())) leggo con
fscanf(fin,"%f %f %f",&a,&b,&c) lo stesso file, con il risultato che
però l'ultima riga viene letta due volte...ho provato anche con un do-
while ma è la stessa cosa...come posso fare a rimuovere il \n prima
della chiusura del file nel primo programma?ho provato portando
indietro il puntatore interno di una posizione con fseek, e poi
scrivendo la fine del file con fprintf(fout,"%c",EOF) ma in questo
caso il ciclo di lettura non termina mai!grazie a tutti, ciao ciao!!

 però l'ultima riga viene letta due volte..
il tuo errore, piuttosto comune, penso dipenda dal fatto
che non hai letto le specifiche della funzione feof().
La feof() testa semplicemente se e' stato settato
il flag di end of file.
Il flag di end of file viene settato se hai cercato di
leggere OLTRE la fine del file, non se hai RAGGIUNTO
la fine del file.
quindi tu non stai leggendo 2 volte l'ultima riga,
ma semplicemente la seconda volta non leggi nulla,
ma hai ancora i valori vecchi in a b e c e non sei
ancora uscito dal ciclo perche' dopo
la prima lettura dell'ultima riga il flag di eof
giustamente non e' stato ancora settato.
per evitare questo ci sono diversi modi,
che NON comprendono la cancellazione dell'ultimo carattere
del file.
per esempio potresti sfruttare il fatto che fscanf restituisce
il numero di campi letti con successo,
quindi all'interno del ciclo potresti mettere
una cosa tipo
if (3 != fscanf(....)) break;
o qualcosa di equivalente.
ciao,
g.

ehm...in effetti non avevo letto la documentazione!grazie mille!ho
fatto la modifica ed ora funziona correttamente!grazie ancora,ciao
ciao!

 if (3 != fscanf(....)) break;
Aggiungo che nella lettura di input esterni è sempre cosa buona e giusta
controllare il successo delle funzioni di I/O e di conversione.
Luca
-- 
Sono un mirabile incrocio tra Tarzan e Giacomo Leopardi.
In me convivono tutte le doti intelluttuali di Tarzan e
tutta la prestanza fisica di Giacomo Leopardi.
A. Borsani
Newsgroup: it.comp.lang.c
Titolo: errore ....prog

ciao
ho scritto un prog che calcola la media dei valori immessi fino a che 
non viene immesso 9999 ma alla compilazione produce degli errori ....che 
non riesco a comprendere
  media.c: In function `main':
  media.c:31: parse error at end of input
#include <stdio.h>
int main(void);
int main(void)
{
     int numero,somma,k;
     float media;
     numero=0;
     somma=0;
     k=0;
     printf("\nInserisci i valori seguiti da 9999\n");
     while(1)
     {
         scanf("%d",&numero);
         if(numero==9999)
         {
            break;
         }
         somma+=numero;
         k++;
     {
     media=(float)somma/k;
     printf("\nLa media e': %.2f",media);
return 0;
}
anche questo codice da errori.....
#include<stdio.h>
main()
{
     int a,b;
     a=154;
     b=16;
     float media;
     media=(float)(a+b)/2;
     printf(" %.2f",media);
return 0;
}
ed ottengo
mep.c: In function `main':
mep.c:9: parse error before `float'
mep.c:10: `media' undeclared (first use this function)
mep.c:10: (Each undeclared identifier is reported only once
mep.c:10: for each function it appears in.)
grazie

      {
      ^^^
Non dovrebbe essere una parentesi chiusa questa?
HTH,
==========================
Stefano Frosio
http://www.esse-effe.com
==========================

mii che figuraccia!
no devo mettermi a programmare la domenica appena sveglio ;)
grazie


Newsgroup: it.comp.lang.c
Titolo: Variabile globale errno

Salve ragazzi
mi sapete dire come leggo il valore della variabile globale errno?
Grazie

 mi sapete dire come leggo il valore della variabile globale errno?
#include <errno.h>
contiene anche la definizione delle costanti come ENOFILE o ENOMEM.
Remo D.
Newsgroup: it.comp.lang.c
Titolo: Indirizzo IP

Qualcuno conosce le API o una qualche funzione per far cambiare
indirizzo IP alla propria macchina senza dover fare il boot ? Grazie,
ciao.

 ciao.
Se  intendi ``cambiare  l'indirizzo  IP durante  una connessione  PPP'',
no.  Altrimenti non  l'ho capito. Specifica su che  sistema operativo, e
spostati sul newsgroup appropriato.
-- 
Emmanuele Bassi         |  Linux: [ 
http://digilander.iol.it/ebassi/linux/
 ]
                        |   SLRN: [ 
http://digilander.iol.it/ebassi/slrn/
  ]
emmanue...@iol.it
  |   SETI: [ 
http://digilander.iol.it/ebassi/seti/
  ]
  GnuPG Key Fingerprint: 9747 635E B95A B0B3 4370 1CAA CAF7 512B 945C A44C

On Mon, 15 Jan 2001 22:41:11 GMT, 
zef...@wolverine.lohacker.net
(Emmanuele Bassi) wrote:
Ok intendo dire che ho un programma in C che gira su una macchina A
(NT 4) e che controlla l'esistenza di un processo XYZ su una macchina
B. Quando questo processo muore o comunque si verificano una serie di
condizioni che sono in grado di testare deve disconnettere dalla rete
la macchina B, e questo lo so fare via software mandando un comando ad
uno switch, poi deve assumere l'indirizzo IP della macchina B e infine
lanciare il processo XYZ che girava su B pero' su A. Questo programma
gira 24 ore su 24, l'unica cosa che non riesco a fare e' cambiare l'ip
della macchina che lo ospita. Se qualcuno puo' aiutarmi, grazie fin da
ora. Ciao.


 wrote in message
pg486t0co66qifpcb...@4ax.com...


 wrote:
Cosi' non puo' andare perche' succede che la macchina A impazzisca e
non gli si vada piu' alla testa, non si riesce a fare il boot da
remoto bisogna spegnerla fisicamente e questo richiederebbe una
vigilanza 24 ore su 24. Al sabato sera per esempio mi piace andare a
mangiare la pizza con mia moglie e i miei amici, vorrei che un
programma in automatico riuscisse a risolvere l'inconveniente.
Io conosco l'IP da sostituire, cioe' la macchina B sa che al
verificarsi di una certa condizione deve assumere l'ip 
xyz.xyz.xyz.xyz
e questo numero e' scolpito nel programma con un #define mi servirebbe
la funzione CambioIlMioIpIn (
xyz.xyz.xyz.xyz
 ) per risolvere tutto.
Grazie. Ciao.


 wrote:

???
Penso che tu sia fuori strada. 
Senjin Omukae

On Tue, 16 Jan 2001 17:58:34 GMT, 
kr...@libero.it
 (Igor Rossetti)
wrote:
perche' ?



PErche' sono distratto e non ho letto il rest del
thread... #^___^#
Mea culpa
Igor ROssetti
Newsgroup: it.comp.lang.c
Titolo: Problema di Assembler

Ciao!
Innanzitutto come mai non c'è un newsgroup dedicato 
all'Assembler? O sono io che fra i tanti newsgroup non
l'ho visto?
Avevo due questioni in merito:
1) Come faccio a stampare a video il risultato di un'espressione
   matematica utilizzando l'Assembler?
   Non credo infatti che esista un interrupt per stampare a video
   il risultato di un'operazione matematica...
2) Ho notato che per resettare il computer posso scrivere:
 
   "
    MOV DX,0Cf9h
    MOV AL,06
    OUT DX,AL "
  Ma 0cf9h che indirizzo di porta è?
  Inoltre esiste in rete un sito con gli indirizzi di 
  tutte le porte di I/O con le relative funzioni?
Grazie!
Paolo 
p.pa...@agonet.it
 
--
Posted from 
mago.agonet.it
 [195.32.124.10]
via Mailgate.ORG Server - 
http://www.mailgate.org


Da 0x0CF8 a 0x0CFF vengono allocate delle risorse della motherboard;
In realtà agendo su quel bit tu induci un reset magari forzando un NMI ...
Un modo sicuro per forzare un reset su 8086 é:
cli
xor   AX, AX
push  AX                  ; registro dei flag
mov   BX, 0FFFFh
push  BX                ;  CS code segment
push  AX               ;   IP
iret
Lo scopo di queste righe è forzare un salto all' indirizzo FFFF:0000 che é
l' indirizzo a cui il processore 8086 inizia l' esecuzione delle istruzioni
in seguito ad un reset hw;
Ciao

   tutte le porte di I/O con le relative funzioni?
Scarica da simtelnet la 'interrupt list di R. Brown'
la trovi nella sezione: msdos/info come interXXX.zip. 
contiene una enorme lista delle chiamate agli interrupt del DOS e anche
una lista dell porte di IO usate dai dispositivi piu' comuni.
Marco
Newsgroup: it.comp.lang.c
Titolo: Progetto per far allenare i principianti sul C


free software&Linux 4ever! ;-)

 
http://c-metria.sf.net
ho letto solo le prime 5/10 righe e già sono presenti "errori":
- M_PI non dev'essere ridefinita se presente
- i parametri delle macro PERIMETRO/AREA/LATO non sono protetti da parentesi
- gli switch non hanno default
- ?
Non sembra un buon inizio...
Ciao!

FtM wrote:

Purtroppo, essendo un software "collaborativo" (e non avendo io il tempo
di controllare accuratamente il codice che mi arriva) è facile che si
presentino errori come questi...
Se vuoi, puoi collaborare sistemando gli errori, altrimenti provvederò
io appena avrò tempo...
Grazie lo stesso!



L'intenzione che hai è di tutto rispetto, e ho dato un'altra letta al codice.
Purtroppo il codice è decisamente imbarazzante, sotto quasi ogni punto di vista, a partire dagli input utente, dall'assenza di centralizzazione delle funzioni comuni alla ridefinizione delle costanti, dal mancato controllo degli input e delle divisioni per zero fino all'utilizzo di caratteri non ascii nelle stringhe. Senza contare che proprio questo tipo di applicazione è un esempio classico di molti libri su vari linguaggi di programmazione, che evidentemente non sono noti a chiunque abbia impostato la struttura generale. In pratica questo è un esempio di come *non* programmare.
Ho cercato di essere costruttivo e poco polemico, ma non vedo nemmeno margini di miglioramento in questa cosa per poter dare una mano.
Tutto questo, ovviamente, IMO (anche se sono quasi certo che qualunque altro programmatore direbbe più o meno le stesse cose).
Ciao!

Grazie per le tue critiche, spero di riuscire al più presto a sistemare
il codice, intanto l'utente MasterSun ha effettuato un grosso debug del
codice... che ne pensate ora?


 codice... che ne pensate ora?
che (incredibile) sono stati aggiunti altri errori (utilizzo di un identificatore riservato e divisione dei file incomprensibile), oltre a quelli che già ti avevo fatto notare, che non sono stati toccati.
Personalmente non credo di dare più un'occhiata, ma almeno spero non lo utilizziate veramente per insegnare il C a qualcuno!
Ciao!

Newsgroup: it.comp.lang.c
Titolo: Sapete come si fa?

Buongiorno,
E' possibile scrivere un algoritmo che utilizzi il comando " dir" del dos
per trovare un file e mi dia il risultato della ricerca su di 1 altro file
(nuovo)? Se si, come devo fare?
Grazie


system("dir nomefile >report");

Newsgroup: it.comp.lang.c
Titolo: Salve,,,come si crea una libreria statica in C per Windows ?

Salve,
come si crea una libreria statica in C per Windows ? La so creare per 
Linux, ma non so come procedere per Windows/Dos. Una volta c'era il 
comando Lib, ma non l'ho mai usato.

 comando Lib, ma non l'ho mai usato.
Dipende dal compilatore che usi. Se usi GCC (per esempio mingw) usi ar 
come su Linux. Se usi PellesC c'e' polib. Etc..
Remo.D

 Remo.D
Cioï¿œ uso la stessa tecnica che uso con Linux ?

 Cioï¿œ uso la stessa tecnica che uso con Linux ?
Se usi il GCC si. Io uso Mingw+Msys su Windows ma anche se usi cygwin 
dovrebbe essere lo stesso.
REmo.D

 REmo.D
Grazie allora, sei stato molto gentile
Newsgroup: it.comp.lang.c
Titolo: strutture e puntatori 2

salve a tutti
ho un dubbio
ho creato una struttura poi ho passato ad una funzione una puntatore a
questa struttura. dentro la funzione  ho poi allocato la memoria per 10
strutture di quel tipo
infine, sempre dentro questa funzione ho riempito i campi delle strutt.
con dei dati
e sono uscito dalla funzione. la funzione e' del tipo
void nomefunc(struct tipo_strutt *nome)
una volta tornato alla main ho chiamato una nuova funzione a cui ho
passato lo stasso puntatore di prima e le ho fatto visualizzare i dati
che avevo immesso con la prima funzione ,
purtroppo pero' i dati che mi stampa sono tutti zeri
sapete dirmi perche'?
 ho provato a stampare i dati all'interno della prima funzione e tutto
funzionava bene, e' come se avesse distrutto i dati dopo l'uscita dalla
funzione ma io le ho passato il puntatore alla struttura.

In realtà non ha distrutto i dati, ma ha semplicemente eliminato la
definizione dello spazio in cui li hai messi.
Quando esci dalla funzione, lo spazio per tutte le variabili che hai
allocato al suo interno (anche con malloc)
viene rilasciato e può essere riutilizzato per altre variabili da un'altra
funzione. E' come se al return venisse eseguita
una "free".
Per questo, ti consiglio di allocare la memoria per tutti i dati nella main,
e poi di passare il puntatore al vettore di struct alla funzione
per il riempimento.
Questo dovrebbe andare.
Riz
"Giovanni Casu" <qgio...@tin.itq> ha scritto nel messaggio
news:3AB7E7B9...@tin.itq...



Questo e' vero solo per le variabili automatiche.
La memoria allocata dinamicamente dallo heap (malloc()) *non* viene
rilasciata automaticamente. E' sempre necessaria una chiamata esplicita a
free().
AC

 allocato al suo interno (anche con malloc) viene rilasciato
no questo no! lo spazio allocato con malloc() rimane occupato fino a che non
lo liberi tu con free()
solo le variabili nello stack (variabili locali) vengono rilasciate al
termine di una funzione.
ciao
donCiccio


Hai passato il puntatore per valore e non per indirizzo: a nomefunc() viene
passata una copia del punatore che verra' modificata localmente *senza*
modificare la variabile originale. Il puntatore alla memoria allocata viene
perso al ritorno dalla funzione (solo in puntatore, la memoria rimane
allocato e non sara' piu' utilizzabile).
Ci sono due soluzioni:
1. Dato che a nomefun() non serve il valore precedente del puntatore,
ritornare il puntatore non come argomento ma come valore di ritorno della
funzione:
struct tipo_strutt *nomefunc()
{
  struct tipo_strutt *p=malloc(...);
  ...
  return p;
}
...
struct tipo_strutt *x;
x=nomefunc();
2. Passare il puntatore per indirizzo:
void nomefunc(struct tipo_strutt **p)  /* puntatore a puntatore a strutt */
{
  *p=malloc(...);
  ...
}
AC
Newsgroup: it.comp.lang.c
Titolo: Aiuto File: istruzioni fscanf() ed fprintf()

salve a tutti, vengo subito al sodo.
Il mio problema e' quello di non riuscire
a leggere i dati numerici che ho inserito in un file.
(devo usare per forza fprintf ed fscanf)
Il programma seguente legge una stringa che verra' utilizzato come
nome del file in cui verranno conservati dei dati numerici e poi
successivamente riletti.
La creazione e la scrittura vanno a buon fine, ma la lettura non mi
funziona, con il debbugger del djgpp mi sono accorto che non entra
nel ciclo della lettura.
Qui di seguito vi mando il programma indicandovi il ciclo che da
il problema.
Un ringraziamento anticipato a tutti coloro che leggeranno questo post
#include <stdio.h>
#include <string.h>
main(){
  char filename[20],filename1[20]="a:\\";
  int i,j,n,q,k;
  int c[1000],temp=0;
  FILE *fin;
  printf("\nInserire il nome del file contenente i numeri da ordinare\n");
  scanf("%s",filename);
  strcat(filename1,filename);
  strcat(filename1,".txt");
  printf("\n%s\n",filename1);
  fin=fopen(filename1,"w+");
  printf("\nQuanti elementi: ");
  scanf("%d",&q);
  for(i=0; i<q; i++) {
    printf("\nElemento %d: ",i+1);
    scanf("%d",&temp);
    fprintf(fin,"%d\n",temp);
  }  /* end for i=0 */
  close(fin);
  fin=fopen(filename1,"r");
  n=0;
  while(fscanf(fin,"%d",&temp)>0){
    c[n]=temp;
    printf("\nelemento inserito : %d",c[n]);
    n++;
  }
  close(fin);
}

 wrote:
Fg>  close(fin);
     ^^^^^
fclose(fin);
Al posto di fclose() e fopen() puoi usare
rewind(fin);
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

 a leggere i dati numerici che ho inserito in un file.
Hai usato close() al posto di fclose() in due punti del programma.
EMG

Hai usato close() al posto di fclose() in due punti del programma.
Ma il compilatore non avrebbe dovuto incavolarsi di brutto e uscire
con un messaggiuo tipo "Cannot convert 'FILE *' to 'int'" ?

 con un messaggiuo tipo "Cannot convert 'FILE *' to 'int'" ?
Immagino di si. Che compilatore usi?
EMG

 con un messaggiuo tipo "Cannot convert 'FILE *' to 'int'" ?
A me il djgpp da questo warning se compilo con -Wall -pedantic -ansi ,
altrimenti non so... cmq compila lo stesso.
-- 
 Ciao, Luca.
 Reply to 
luca....@tiscalinet.it
 UIN : 43385135

altrimenti non so... cmq compila lo stesso.
Interessante. Mentre il DJGPP lo considera solo warning (e per vederlo
devi andarlo a cercare) il Borland Turbo C++ lo considera errore e
quindi non ti compila.
Curiosita' : Esistono delle specifiche di cosa deve venir considerato
warning e cosa errore oppure la cosa e' affidata a chi sviluppa il
compilatore ?

 compilatore ?
Mi sembra che la differenza tra errore e warning sia precisa. Invece in
alcuni casi dare warning non è obbligatorio ed è lasciato alla
discrezione del produttore del compilatore.
EMG
Newsgroup: it.comp.lang.c
Titolo: Domanda su puntatori e memoria

Sicuramente non è il modo giusto di procedere, ma è l'unico soluzione
che mi è venuta in testa...
Si può modificare il valore della locazione di memoria dove un puntatore
sta puntando, in modo da "spostarla" su un'altra locazione?
Voglio (vorrei, ma non ce l'ho ancora fatta) creare un puntatore a
puntatore, ad esempio di 1 carattere, passarlo ad una funzione, la quale
fa dei conti, crea un nuovo puntatore a caratteri di lunghezza adeguata
secondo i suoi calcoli, lo riempie e mette nel primo puntatore passato
l'indirizzo di memoria. Questo, secondo le mie astrusioni mentali :),
permette alla funzione chiamante di poter utilizzare, dopo aver chiamata
la seconda funzione, il puntatore in tutta la sua nuova lunghezza,
riempito con i valori dalla funzione chiamata.
Codice non funzionante:
int test(char ** myC, int * myI) {
     int numero = 50, n;
     char * newC[numero];
     * myC =  * newC;
     * myI = numero;
     strcpy((char *)newC, "cdscsacdscsaasdcs");
     printf("%s \n", newC);
     printf("%s \n", myC);
     return 0;
}
int main(int argc, char *argv[])
{
     char ** myC;
     int myI = 0, n;
     test( myC, &myI);
     printf("%d \n Nuovo valore %s \n", myI, myC ) ;
     return EXIT_SUCCESS;
}
Avete qualche suggerimento da darmi?
Grazie,
Michele

 }
questo non puo' funzionare newC e' un array di 50 puntatori. 
poi tu assegni il valore del primo puntatore a *myC ma tale puntatore
non punta a nulla di valido.
poi scrivi una stringa dentro ad un char** castandolo a char*, e'
errato.
se anche avessi dichiarato un array di 50 caratteri (e non di 50
puntatori a caratteri) e corretto gli altri errori, il tutto non
funzionerebbe in quanto l'array verrebbe distrutto all'uscita della
funzione ed il puntatore punterebbe a roba che non esiste piu'. Dovresti
usare static o allocare la memoria dinamicamente.
guardati:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void f(char **p)
{
    static char buffer[256] = {0};
 
    sprintf(buffer,"Sono Luigi ed ho %d anni!",(rand()%80)+11);
 
    *p = buffer;
}
int main()
{
    char *p = NULL;
    f(&p);
    puts(p);
 
    f(&p);
    puts(p);
    f(&p);
    puts(p);
    return 0;
}
Sono Luigi ed ho 52 anni!
Sono Luigi ed ho 78 anni!
Sono Luigi ed ho 25 anni!
Press any key to continue
il problema di static e' che se fai:
f(&p1);
f(&p2);
e poi fai:
puts(p1);
puts(p2);
ottieni la stessa stringa in quanto la zona di memoria e' condivisa.
questo problema lo eviti se allochi memoria dinamicamente (malloc), ma
poi devi ricordarti di liberarla.
Tommaso
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Newsgroup: it.comp.lang.c
Titolo: A COSA SERVONO LE LISTE???

Ciao a tutti,
come da oggetto non ho capito l'utilità delle liste. Potreste farmi qualche
esempio pratico??? Voglio dire...in che contesto vi è capitato di usarle???
Grazie per la risposta


Quando usi un array hai un tempo di accesso di ordine O(1), ovvero in
tempo costante riesci ad accedere a qualsiasi elemento.
Hai pero' un costo molto alto quando devi per esempio inserire
elementi tra 2 gia' esistenti o cancellare un elemento e compattare lo
spazio (nel peggiore dei casi e' lineare con la dimensione
dell'array).
Su di una lista il costo di ricerca puo' essere lineare, ma hai un
costo di inserimento e cancellazione di O(1).
Le liste le usi in genere quando devi inserire e cancellare sovente
degli elementi. Comunque e' un interpretazione molto soggettiva e che
dipende dalla natura specifica del problema.
Mox
-- 
Mox

 dipende dalla natura specifica del problema.
Per esempio, se volessi scrivere una rubrica, secondo te sarebbe meglio
utilizzare le liste(dove ad ogni elemento della lista corrisponde un
contatto), oppure un array di strutture(ogni struttura definisce un
contatto)?
Grazie per l'aiuto


Un albero binario di ricerca, ribilanciato ogni tanto (non stiamo a
discutere del quando e del come).
Oppure usi il classico metodo da DB: un array con tutti i dati e poi
una struttura per indicizzare i vari elementi (questo mi pare sia
conveniente quando hai un bel po' di dati inseriti).
Una lista in genere non si usa quando devi tenere on rigoroso ordine
alfabetico, come non si usa un array direttamente, perche'
l'operazione piu' frequente non e' l'inserimento o la cancellazione,
ma la ricerca.
Mox
-- 
Mox
Newsgroup: it.comp.lang.c
Titolo: Metodi per manipolare socket multicast

Salve!
Qualcuno di voi sa se esistono in C (non ++) dei metodi per manipolare i
socket multicast?
Grazie!

 writes:

Ambiente?  Se Unix, consulta la FAQ list dei sockets:
http://kipper.york.ac.uk/~vic/sock-faq/
 .  Se non-Unix,
camiba ambiente :-)
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it

 ha scritto nel messaggio
news:rmaejfp...@mlinux.pd.infn.it...


.. scusa ma il link che mi hai dato porta ad una pagina che é scaduta..
potresti suggerirmi un altro riferimento?
Grazie ancora!!


 potresti suggerirmi un altro riferimento?
Altavista suggerisce:
http://unlser1.unl.csi.cuny.edu/faqs/sock-faq/html/unix-socket-faq-1.html
Io suggerisco: metti un indirizzo EMail valido nel tuo header.


 ha scritto nel messaggio
news:rmya6zb...@mlinux.pd.infn.it...




Newsgroup: it.comp.lang.c
Titolo: Aiuto Grafica

Ciao, sapreste dirmi dove trovare info su come programmare la grafica in c,
intendo cambiare lo sfondo, creare delle finestre ecc..., ho visto su
www.programmazione.it
che c'è qualcosa ma è tutto in Assembler e non ci capisco ua mazza.
Grazie e Ciao
Massimo

you wrote:

Il C standard (proprio perche' standard) non possiede alcuna libreria
grafica. Se vuoi programmare sotto Windows, adopera un ambiente di
sviluppo adeguato (Visual C++, Borland C++ Builder, ...) ed usa i
framework a tua disposizione.

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

Qualcuno conosce delle routine già pronte per la decompressione di file 
mpeg4?

 mpeg4?
guarda la libreria che usa ad esempio mplayer per decodificare
l'mpeg4.
Ciao Jack

 mpeg4?
ffmpeg (credo).
Ciao,
Giulio
-- 
OnAir:
http://www.giuliopetrucci.it
http://www.fujikomonamour.com

mpeg4?
www.xvid.org
xvidsquint.sourceforge.net

Newsgroup: it.comp.lang.c
Titolo: INSEGNO IL C++ GRATUITAMENTE

Per informazioni 
tre...@grisnet.it

Si sei bravo, sei bravo veramente bravo....
Perche' invece di starti a pavoneggiare, tipico se tu fossi veramente un (o
una)
13enne, non rispondi a qualche messaggio?
Hai spedito 6 (sei) volte lo stesso messaggio e alla fine tale NFrancesco ti
ha risposto sul NG. Dai su rispondi ... che ti costa ... infondo tu
_*Insegni il c++
gratis*_ ... a 36 alunni!!
Almeno dimostra che mi sto sbagliando.
PS.: Alessio Treglia e' lo stesso di !!!!!CERCASI LAVORO!!!!!
PS2.: Il tutto e' stato scritto amichevolmente NON per creare un
bel flame OK? Se vuoi creare un flame rispondi in mail e non sul NG
lasciamo fuori chi non e' interessato!
PS3.:Scusa NFrancesco tu non c'entri niente...
--BGies smiles--
Ellen: When I was 7 years old my father took me to the zoo.
Jack: Did they accept you?
BGies at 
bg...@mercurio.it

Newsgroup: it.comp.lang.c
Titolo: ok ma non va bene

Ok  , lo sapevo(basta guardare nella mappa caratteri) però questo funziona
sul tower Acer ma sul portatile Acer no???
Mi dà un bip come risposta e devo importare il carattere dalla mappa

Ok  , lo sapevo
Per cortesia, sei OT.
--
Andrea Laforgia (ICQ 87230455)
Newsgroup: it.comp.lang.c
Titolo: linking

Quando scrivo #include <qualcosa> creo un linking statico?

 Quando scrivo #include <qualcosa> creo un linking statico?
No, il tipo di link dipende esclusivamente dai parametri del linker. Il
C non prevede il concetto di linker, pero` (linkage e` un'altra cosa).
Luca
-- 
Home: 
http://kronoz.cjb.net
La vasca da bagno fu inventata nel 1850, il telefono nel 1875.
Se fossi vissuto nel 1850, avrei potuto restare in vasca per 25 anni
senza sentir squillare il telefono
Newsgroup: it.comp.lang.c
Titolo: Piccola confusione con malloc e matrici dinamiche... AIUTOOOO!!

[Premessa], credo che tra un po' impazzisco.
[Domande]:
-Se uso la Malloc in una funzione esterna che richiamo (anche
indirettamente) nella Main, all'uscita della funzione, la memoria presa
da Malloc viene liberata??
Cioè se ho
void foo(){
int *p;
p=(int) malloc(sizeof(int));
}
e nella main richiamo foo(); quando foo termina, la memoria di p viene
liberata??
Il mio problema è che vorrei cercare di allocare dinamicamente matrici
in funzioni esterne alla Main, così da poterne allocare quante ne
voglio... ma sembra che nessuna alla fne associ ad un mio puntatore
globale (dichiarato come **matrix) la matrice allocata dinamicamente.
Potete confermare i miei dubbi?? Ottengo in continuo errori di memoria
frammentata!!!!
Ecco un codice di esempio...
void make(int ***assegna){
     int **pp;
  pp=(int **) malloc(3* sizeof(int *));
  pp[0]=(int *) malloc(3 * sizeof(int));
  int val;
  val=352;
  pp[0][1]=val;
  assegna=&pp;
     }
int **kk; /*GLOBALE!!!*/
int main(int argc, char *argv[])
{
  make(&kk);
  kk[0][1]=123;
  printf("Vettore di vettori kk=%d", kk[0][1]);
 
 
  system("PAUSE");	
  return 0;
}

   assegna=&pp;
   ^^^^^^^^^^^^^
   *assegna = pp;
Ciao.

No. E se proprio vuoi fare il cast č: p=(int*) malloc(sizeof(int));
Il cast non serve in C.

  kk[0][1]=123;
Questo rimane uguale...
Newsgroup: it.comp.lang.c
Titolo: Tastiera

Salve a tutti , devo scrivere un programmi in C
e compilarlo con tinyC . Questo compialtore non
ha gli header key.h e non accetta  con lo switch
tasti come F1 .
Sapete dirmi se e possibile da un prog C rimappare
la tastiera o c'è un altro modo per fare per utilizzare
i tasti F1 anche se non vengono acettati dal compilatore .
Grazie a tutti
Ciao


Non conosco il compilatore che stai utilizzando e per poterti aiutare dovrei 
almeno sapere il S.O. che stai utilizzando. In ogni caso, potrebbe esserti 
utile sapere che premendo un tasto funzione o una freccia direzionale, 
solitamente, si ha come risultato il fatto che da programma sembra che i 
tasti premuti siano due ed il primo carattere ricevuto ti informa che è 
stato premuto un tasto speciale mentre il successivo ti permette di 
riconoscerlo. Questo che ti ho preparato è un esempio per dos:
#include <stdio.h>
#include <conio.h>
void main(void);
void main(void)
{
 int c;
 while(kbhit())getch(); /* Free kb buffer */
 printf("\nDigita i tasti di cui vuoi conoscere il codice:\n");
 while((c = getch()) != '\x1b') /* While NOT esc */
 {
  switch(c)
  {
  case 0:
   printf("Tasto funzione + ");
   break;
  case 0xE0:
   printf("Tasto speciale + ");
   break;
  case '\r':
   printf("Tasto invio %02Xh                               \r", c);
   break;
  default:
   printf("valore %02Xh -> '%c'                            \r", c, c);
  }
 }
}
Spero che ti possa esser utile.
Un saluto.
Maxime 

...  , sei stato utile , ti ringrazio  .
Ciao
Newsgroup: it.comp.lang.c
Titolo: Programmino cretino che mi sta rompendo...

prima della barra!E' normale??Non mi pare, che succede, il blank non fa'
Lo spazio viene interpretato come fine del campo che stai leggendo, usa gets
invece di scanf e tutto ti funzionera' perfettamente, personalmente
preferisco usare gets (fgets per i file) invece di scanf o fscanf
l'interpretazione dei dati la fai poi dopo che hai acquisito la stringa.
Ciao, Marco.

 wrote:
[ snip ]
P>con la barra,infatti la scanf tronca la stringa letta a tutto cio' che c'era
P>prima della barra!E' normale??
Si.
$ man scanf
Comunque il tuo codice presenta anche la possibilita' di un buffer
overflow se qualcuno inserisce una stringa maggiore di 14 caratteri.
Ti consiglio di sostituire 
	scanf("%s", Stringa);
con
	fgets(Stringa, sizeof Stringa, stdin);
Fai attenzione che Stringa contiene il '\n' finale. Se e' un
problema lo devi eliminare esplicitamente.
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

piu' parte del set dei caratteri ASCII??
La funzione scanf() ha proprio questa caratteristica :
"...scanf functions will terminate under the following circumstances:
1.	The next character in the input field conflicts with a
corresponding non-whitespace character in the format string.
...."
Sempre meglio usare fgets() come ti e' stato giustamente suggerito.
scanf() e' sempre molto poco usata.

problema lo devi eliminare esplicitamente.
Se invece di usare fgets usa gets non si deve porre il problema del \n e'
rimosso automaticamente e non deve neppure specificare lo stream di input.
Ciao, Marco.

rimosso automaticamente e non deve neppure specificare lo stream di input.
Dimenticavo che pero' non c'e' controllo su buffer overflow :-)
Ciao, Marco.

preferisco usare gets (fgets per i file) invece di scanf o fscanf
Conviene usare fgets() in ogni caso,  anche se non espressamente per i
file.
O meglio, non solo per i file su disco, ma anche per il buffer di
tastiera stdin.

piu' parte del set dei caratteri ASCII??
Fossi in te mi costruirei una procedura gets() con la funzione
getchar().
Cosi' te la fai personalizzata e non hai di queste stranezze usando
scanf() o roba gia' fatta del genere.
In questo modo puoi anche non mettere nessun limite alla lunghezza
della stringa, alloccando la memoria a mano a mano che ti arrivano i
caratteri da tastiera. 
Magari pero' in un secondo momento...
se vuoi un esempio della proc fammi sapere.
Ciao
Camillo

 getchar().
E perché non utilizzare direttamente la gets() standard preesistente?
EMG



Esatto. O ancora meglio : la fgets()

Newsgroup: it.comp.lang.c
Titolo: TESTI per i socket

qualcuno sa consigliarmi qualche testo per studiarmi i socket ?


"Outside of a dog, a book is man's best friend.
Inside of a dog, it's too dark to read."
			-- Groucho Marx --
Newsgroup: it.comp.lang.c
Titolo: AIUTO!

La prima di queste 2 funzioni mi conta il numero di tutti i nodi di un
albero binario e la seconda il numero delle foglie, sapete dirmi se ho fatto
errori?
Grazie
/* definizione albero */
typedef struct nodo {
         int info;
         struct nodo *sin;
         struct nodo *des;
       } tipo_nodo;
typedef tipo_nodo *punt_albero;
/* ammettiamo che l'albero non sia vuoto */
/* funzione conta_nodi */
void conta_nodi(punt_albero alb)            /* alb è la radice */
{
   int cont=0;
   if(alb!=NULL)
   {
      cont++;
      conta_nodi(alb->sin);
      conta_nodi(alb->des);
   }
}
/* funzione conta_foglie */
void conta_foglie(punt_albero alb)
{
   int cont=0;
   if(alb!=NULL)
   {
      if(alb->sin==NULL) && (alb->des==NULL)
      cont++;
      conta_foglie(alb->sin);
      conta_foglie(alb->des);
   }
}

 snip
Ciao Carlo,
dovresti dichiarare cont statica in entrambe le funzioni altrimenti ad ogni
chiamata ricorsiva ti si riazzera ed inoltre le funzioni dovrebbero
restituire cont, per cui devi cambiare il tipo di ritorno da void a int.
Attenzione inoltre a quando si inizializzera´ la variabile di tipo
tipo_nodo, su cui vuoi fare i tuoi conti, i puntatori sin e des dovranno
essere inizializzati a NULL, altrimenti la ricorsione sara´ "infinita".
Maurus

Sono sempre io che rompo ma si avvicina l'esame!
Dato un puntatore A alla radice di un albero binario, i cui nodi contengono
numeri interi già presenti in memoria, devo scrivere una funzione che
ricevendo A in ingresso calcoli la somma S1 dei valori sel sottoalbero
sinistro, S2 per il destro e restituisca la differenza (S1-S2).
Quella che ho scritto a me sembra troppo facile.......ci sono errori?
Grazie
/* def albero */
typedef struct nodo {
         int info;
         struct nodo *sin;
         struct nodo *des;
       } tipo_nodo;
typedef tipo_nodo *punt_albero;
/* funzione calcola */
int calcola(punt_albero A)
{
   int S1, S2, dif, sum;
   if(A!=NULL)
   {
      sum+=(A->info);
      S1=calcola(A->sin);
      S2=calcola(A->des);
      }
   dif=S1-S2;
   return dif;
}

}
... e nemmeno usata successivamente. Inoltre le chiamate ricorsive a
calcola() non fanno quello che tu vuoi: dovrebbero semplicemente
restituire la somma dei valori dei nodi. E per farlo, devi richiamare
non la funzione calcola(), ma un'altra funzione che si occupi di questo.
-- 
Saluti,
    Mardy

     Mardy
Ho modificato la funzione:
/* funzione che calcola la somma dei nodi */
int sum=0;
int calcola_somma(punt_albero A)
{
   if(A!=NULL)
   {
      sum+=A->info;
      calcola_somma(A->sin);
      calcola_somma(A->des);
   }
   return sum;
}
/* funzione che calcola la differenza */
int calcola_dif(punt_albero A)
{
   int s1, s2, dif;
   s1=calcola_somma(A->sin);
   s2=calcola_somma(A->des);
   dif=s1-s2;
   return dif;
}
Ora funziona?
Grazie

Ora funziona?
Non l'ho provato, ma credo proprio di sě.
-- 
Saluti,
    Mardy
Newsgroup: it.comp.lang.c
Titolo: [NOOB]Come permettere la stringa vuota?

Avrei una domanda da vero e proprio niubbo sulle stringhe:  sto facendo
un programma e a un certo punto richiedo una parola come input per una
stringa. La stringa è
char parola[100];
quando chiedo l'input all'utente vorrei che il programma accettasse
anche la stringa vuota. Il problema comincia quando avvio il programma:
durante la fase di input non mi accetta la stringa nulla o meglio se
viene premuto invio senza scrivere niente semplicemente la shell va a
capo e il programma continua a chiedere una parola in input. Qualcuno
sa cosa sbaglio e come permettere l'inserimento della stringa vuota?
Grazie.

 anche la stringa vuota.
Che cosa stai usando per acquisire la stringa? Prova a postare il codice
rilevante.
Comunque, per questo genere di applicazioni ti conviene usare fgets() per
acquisire l'input ed eventualmente rielaborarlo in seguito con sscanf (se
necessario). Ad esempio:
if (fgets(parola, 100, stdin) != NULL) {
	/* Ora parola contiene al massimo 99 caratteri
	   digitati dall'utente, incluso il '\n' finale
	   che dovrai provvedere a rimuovere. */
}

Uso scanf("%s", parola) dove parola è quella che ho dichiarato nel
primo post. Alcuni amici mi hanno consigliato di utilizzare getchar, ma
io non so come si utilizza e non conosco la differenza tra scanf e
getchar.

 vuota?
Ti sei dimenticato di includere il codice...
Luca
-- 
Home: 
http://kronoz.cjb.net
Inquietudine sintetica
Solo, davanti all'ignoto
Tienimi stretto a te

Includere il codice? Kronos sono veramente ignorante in  materia, di
che codice parliamo?

 che codice parliamo?
Il codice che hai scritto tu :P
Nell'altro post hai scritto che usi la scanf.
        scanf("%s", buf);
Il problema sta nello specificatore di conversione che usi. 's' indica
una sequenza di caratteri non white-space ("non-white-space characters").
Il newline è considerato whitespace, quindi la conversione non viene
effettuata.
Viste le solite considerazioni sulla sicurezza di scanf (cerca nel ng),
dovresti usare fgets:
char buf[100];
if (fgets(buf, sizeof(buf), stdin) == NULL) {
        /* Errore di I/O */
}
if (buf[0] == '\n') {
        /* Stringa vuota */
} else {
        /* Stringa non vuota, lunga al massimo 98 caratteri
         * (99 se si include il newline).
         */
}
Luca
-- 
Home: 
http://kronoz.cjb.net
"L'amore consiste nell'essere cretini insieme." -- P. Valery

Penso che mi leggerò qualche post a riguardo. Diamo che
all'università i prof mi hanno fatto usare sempre scanf e non si sono
dilungati troppo sulle varie funzionalità della libreria di standard
input e output. Grazie Kronoz