mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Array che decate a puntatore al primo elemento

Ci sono dei casi in cui un array decade a puntatore al primo elemento.
Il primo e' quando passo l'array a una funzione... gli altri 2 non li
ricordo piu'.
Qualcuno sa' aiutarmi (mi pare fossero altri 2)?
Mox :)



L'array decade *sempre* nel puntatore al primo elemento,
*meno* che in tre casi specifici: quando e' argomento di
sizeof, quando e' argomento di & (operatore address-of) e
quando e' un literal string di inizializzazione di un
vettore.
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]

vettore.
Ops, me lo ricordavo al contrario, sorry.
Una cosa pero', se prima passo l'array a una funzione come argomento e
poi applico il sizeof() a questo array ...l'array e' gia' decaduto,
quindi la sizeof mi restituisce la dimensione del puntatore, giusto?
Mox

 quindi la sizeof mi restituisce la dimensione del puntatore, giusto?
Si'.
In realta' le funzioni accettano *sempre* puntatori.
Scrivere:
void func(int a[5]);
e scrivere:
void func(int *a);
e' esattamente la stessa cosa.
Questo SOLO nel caso dei parametri formali delle funzioni.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

> quando e' un literal string di inizializzazione di un vettore.
Puoi fare un esempio? ... questa non la sapevo ... e non l'ho neanche capita
:)
Grazie
Alessio C.

 :)
Quando hai :
char *p = "andrea";
a p viene assegnato un indirizzo di memoria, tant'e' vero 
che non e' neanche detto tu possa modificare il contenuto 
della memoria puntata da p.
Invece, nel caso di:
char a[] = "andrea";
stai assegnando 7 elementi (compreso il NUL finale) uno a uno 
al vettore.
Nel primo caso, il vettore "andrea" decade nel puntatore
al suo primo elemento, nel secondo caso invece diventa 
{'a','n','d','r','e','a','\0'} e l'assegnazione viene compiuta,
quindi, elemento per elemento.


Questo fatto non è riconducibile al fatto che un vettore definito
direttamente in questa forma:
char vett_a[DIM_VETT];
non può essere un lvalue??!?!
Da questo punto di vista infatti sia <vett_a> che
char vett_b[]="Pippo";
non possono essere usati come lvalue per scivere ad esempio ...
char* vett_c="Pluto";
vett_a=vett_c;    /* Errore */
vett_b=vett_c;    /* Errore */
Il motivo è sempre legato al fatto che sia <vett_a> che <vett_b> non vengono
gestiti dal compilatore come oggetti in cui salvare il puntatore ovvero in
memoria non vi saranno dei byte occupati dal puntatore <vett_a> e <vett_b> e
quindi ogni volta che serve il contenuto di questi vettori il programma
accede direttamente alla stringa!!
Mi sbaglio?!?!
Ciao e grazie comunque per il chiarimento!
Alessio C.
Newsgroup: it.comp.lang.c
Titolo: problema con il comando switch

Salve a tutti, sono agli inizi con il c e stavo "giocando" con la funzione
switch-
Volevo creare un programma che offrisse una scelta iniziale e in base alla
scelta eseguisse determinate operazioni:
vi posto il pezzo di programma semplificato
#include <stdio.h>
#define NUM 10
void main (void)
{
int x, i, n, sum, media;
printf ("Seleziona l'operazione desiderata :\n");    // ho messo 3
possibilità per velocità e solo la prima completa
scanf ("%d", &x);
switch (x)
 {
 case 1: i=0;
            sum=0;
            while (i<NUM)
                {
                printf ("Inserisci i valori di cui calcolare la media: ");
                scanf ("%d", &n);
                sum += n;
                i++;
                }
            media = sum/i;
            printf ("La media tra i numeri inseriti e' %d", media); break;
 case 2: printf ("x =2"); break;
 case 3: printf ("x =3"); break;
  }
}
Ora espongo il mio dubbio:
Come faccio alla fine del comando 1 a farlo ritornare all'inizio e offrire
la possibilità di una nuova scelta?
Spero di essere stato abbastanza chiaro.

 Spero di essere stato abbastanza chiaro.
-- 
Lawrence "Rhymes" Oluyede
http://loluyede.blogspot.com
rhy...@NOSPAMmyself.com

 la possibilità di una nuova scelta?
Ti basta inserire lo switch in un ciclo, aggiungendo logicamente 
un'opzione (ad esempio 4) per uscire. Ecco un modo:
do {
     scanf ("%d", &x);
     switch (x) {
         case 1: /* ... */
         case 2: /* ... */
         case 3: /* ... */
     }
} while (x != 4);
Quando x == 4 esci dal ciclo e termina il programma.

 un'opzione (ad esempio 4) per uscire.
Ok chiaro!
Volevo mettere l'opzione per uscire come ultimo case dello switch ma la
sposterò nel ciclo precedente.
Grazie ancora a te e anche a Lawrence
Mark

 sposterò nel ciclo precedente.
Si' puoi anche mettere un bel 'return 0' nel case 4 eventualmente. E' 
una delle molte possibilita'.

 Qual è la differenza sostanziale?
Lo standard di dice che DEVI farlo, quindi dovresti attenertici.
Il programma in se comunque funziona (ammesso che il compilatore te lo
permetta, v. oltre).
Il main pero' e' una funzione particolare (come avrai letto): la prima che
viene chiamata ed e' anche quella che ritorna il risultato del tuo
programma all'ambiente.
L'ambiente si aspetta un intero. Se tu gli passi un void o qualunque altra
cosa il risultato e' indefinito. I problemi sono appunto a questo livello.
I compilatori aderenti allo standard te lo segnalano. Alcuni compilatori lo
fanno solo se abiliti determinate opzioni.
Il GCC 3 di default ti segnala se il main non ritorna un int.
-- 
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."

 Qual è la differenza sostanziale?
Che int main(void) e` standard. :)

Newsgroup: it.comp.lang.c
Titolo: [help]timer

Salve vorrei sapere come posso implementare un timer in c:
Dovrebbe essere una funzione che mi permette, ogni tot secondi(passati come
parametri) di eseguire un qualcosa. Il tutto sotto linux e con  il minimo
dispendio di risorse.
Grazie a chiunque possa aiutarmi


tutto ciò che fa' riferimento ad architettura hardware specifica non è ansi
C
se vuoi evitare il classico for con lettura dei secondi  che impalla il
sistema devi crearti una funzioncina tua con riferimenti alle librerie di
sistema in relazione all'ambiente in cui operi.
qualcosa di simile lo trovi nei post precedenti

Newsgroup: it.comp.lang.c
Titolo: perche' nn funziona?

mi da' errore di parse alla riga della malloc
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
int main(int argc, char * argv[]);
int main(int argc, char * argv[]) {
        //stampo errore se nn specifica l'argomento
        if (argc!=2) {
                printf("Err: sintassi: diprova1 [file senza .asc]\n");
                return -1;
        }
 
        //char *prova= (char *) malloc (10);
        if ( !(char *comando = (char *) malloc( (strlen(argv[1])*2) + 15 ) )) {
                printf("Non riesco ad allocare %d bytes in memoria 
(malloc)\n",strlen(argv[1])*2+15);
                return -2;
        }
        strcpy(comando, "diprova1 \0");
        strcpy(comando+9,argv[1]);
        strcpy(comando+strlen(argv[1])+10, " \0");
        strcpy(comando+strlen(argv[1])+11, argv[1]);
        strcpy(comando+strlen(argv[1])*2+11,".asc\0");
 
        if (system(comando) == -1) {
                printf("errore %d in system()\n", errno);
                return -3;
        }
        return 0;
}

         if ( !(char *comando = (char *) malloc( (strlen(argv[1])*2) +
                 ^^^^^^
In C non puoi fare una dichiarazione quì.
La variabile 'comando' deve essere dichiarata all'inizio della funzione.
-- 
---
In silenzio anche un idiota sembra intelligente. Ma non c'è problema,
l'idiota vuol sempre dire la sua.

 
mi spiace contraddirti ma anche se posta normalmente come riga da sola
(fuori If insomma) genera lo stesso errore. dovrei metterla fuori della 
main?
grazie ciao

 main?
Non mi sono spiegato bene.
Le dichiarazioni vanno come prime istruzioni della funzione main (o altra 
funzione), prima di ogni statement non dichiarativo.
int main(int argc, char *argv[]) {
  char * comando;
  ...
  for(comando = (char *) malloc( (strlen(argv[1])*2) +
  ...
}
-- 


giusto!
grazie


 (o altra funzione), prima di ogni statement non dichiarativo.
Per completezza, le dichiarazioni possono essere messe subito dopo una
parentesi graffa aperta. La variabile vale solo per il blocco in cui č
definita. Ad esempio:
    if (x > 0) {
        int y = ...;
Maurizio.


Scusate ma scrivere il prototipo di main ha senso?


Siceramente no. E' codice duplicato...
Saluti
Rosario Ianuale
Newsgroup: it.comp.lang.c
Titolo: domanda sciocca

Scusate con quali tasti posso scrivere il simbolo che sembra un serpente?
LA esse rovesciata per intenderci.
Scusate
Grazie infinite

 ha scritto nel messaggio
news:8qi9t9$e1i$1...@lacerta.tiscalinet.it...

~  = Codice ascii 126   (Alt + 126)
ciao

 LA esse rovesciata per intenderci.
Se intendi questo simbolo ~ si chiama "tilde"
--
 Ciao, Bianco.
 Reply to 
luca....@tiscalinet.it

Newsgroup: it.comp.lang.c
Titolo: L'Onda

 Il nome: L'Onda, raduno internazionale di chattatori in Internet.
Ma questo che è diventato il newsgroup degli imbecilli?!
EMG

...

Credo di si.
ZEC

Newsgroup: it.comp.lang.c
Titolo: tipo di un'espressione

ciao,
domanda: è possibile determinare il tipo di un'espressione? ad esempio 
sizeof(object) determina la dimensione di "object" (espressione/tipo). 
esiste un operatore simile per i tipi (una sorta di... typeof())?
ad esempio:
typeof(5.0) --> restituisce "double"
typeof(5+7) --> restituisce "int"
eccetera.

fctk <-> wrote:

In C? Non mi risulta....
-- 
daniele_athome

Newsgroup: it.comp.lang.c
Titolo: Pocket C x Palm

Sto cercando il programma Pocket C per PalmOs, o un qualsiasi altro
programma per PalmOs di sviluppo in C. Qualcuno me lo può spedire in mail?
grazie!
PS: non shareware!
st...@email.it


Si? E anche una fettina di culo, magari?
P.S: Chiamasi pirateria....
-- 
"Windows 95 is a 32-bit shell for a 16-bit extension to an 8-bit
operating system designed for a 4-bit microprocessor by a 2-bit
company that can't stand one bit of competition."
La mia (penosa, per ora) homepage: 
http://digilander.iol.it/burton666

Ok mister finezza, allora specifico più correttamente: sto cercando un
compilatore C per PalmOs. So che ce ne sono alcuni, anche open  source o
freeware. Non lo voglio shareware! Qualcuno può aiutarmi? Grazie.


Allora ti prego di perdonarmi, ma dalla tua descrizione sembrava che ti
volessi una versione "completa" di un programma commerciale.
Faccio pubblica ammenda. Scusami ancora.


 o freeware. Non lo voglio shareware! Qualcuno può aiutarmi? Grazie.
come no, ti puo' aiutare tantissimo un qualunque motore di ricerca

Hai ragione, Pocket C č solo shareware, potevo essere frainteso. Cmq non ho
ancora risolto il problema... :-( Mi sembra assurdo che non esistano
compilatori per C non shareware, il linguaggio piů usato...


 esistano compilatori per C non shareware, il linguaggio piů usato...
Giusto perche' sono buono, oggi
http://www.palmos.com/dev/tech/tools/gcc/
(trovato in 30 secondi scrivendo su google "palm os compiler free")

Grazie!
Newsgroup: it.comp.lang.c
Titolo: Come esportare da una DLL senza il _ ?

Progetto: fare una DLL plugin per WinAmp.
L'unica funzione esportata della DLL č:
winampVisHeader* winampVisGetHeader();
Io uso il compilatore a riga di comando del C++ Builder 3
Per esportarla si puň usare:
winampVisHeader* __export winampVisGetHeader();
oppure
__declspec(dllexport) winampVisHeader* winampVisGetHeader();
oppure ancora fare un file .DEF con una sezione EXPORTS
Problema:
in tutti i modi, la funzione mi viene esportata come
_winampVisGetHeader() e NON come winampVisGetHeader()
mentre WinAmp cerca la funzione senza il _
Soluzione che non funziona:
Esiste un'opzione del compilatore ( -u- ) che non mette gli underscores
davanti ai simboli esportati, ma cosě facendo non riesco a linkare le
librerie tipo <windows.h> fornite dalla Borland che mi servono nel progetto.
Qualcuno ha qualche idea?
TobiX

Qualcuno ha qualche idea?
Non ne sono sicuro ma credo che la cosa dipenda dal name mangling 
del C++, oltretutto non ricordo come risolvere il problema...
Sorry...
Spero comunque di averti indirizzato nella direzione giusta.
Paolo
------------------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
  G: Per concludere, possiamo chiedervi di commentare
     l'attuale panorama informatico?
  I: /* l'attuale panorama informatico */
------------------------------------------------------------------

Prova cosi':
extern "C"  __declspec(dllexport)  winampVisHeader* APIENTRY
winampVisGetHeader(void);
Saluti.


ICQ #34602650

 winampVisGetHeader(void);
GRANDE!!!!!
beh, extern "C" c'ero arrivato anche da solo,
ma APIENTRY CHE DIAVOLO E' ???
non l'ho trovata in nessuna documentazione!
boh...
grazie!
TobiX

,

_stdcall ?
-----------== Posted via Deja News, The Discussion Network ==----------
http://www.dejanews.com/
       Search, Read, Discuss, or Start Your Own    

non l'ho trovata in nessuna documentazione!
In WINDEF.H, comunque equivale a una chiamata tipo stdcall (standard Win32).
In BCB la calling convention di default e' cdecl.
Saluti.


APIENTRY stabilisce la convenzione di chiamata
in C/CPP la convezione non è standard rispetto al resto degli altri
linguaggi, ma permette di renderla standard con APIENTRY che
setta la convenzione Pascal e non C
Newsgroup: it.comp.lang.c
Titolo: borland c++ builder 5 - come genero gli exe?





ho installato il borlad C++ 5 builder prestatomi da 
un amico.


Ho programmato in c++ 3.0 borland facendolo girare 
sotto windows.


però ora non riesco a far girare i vecchi progs su 
questo nuovo compilatore.


La compilazione non mi da alcun errore, tutto Ok 
però non vedo l'eseguibile ne in una finestra 


come accadeva col veccho c3.0 e ne trovo il file 
.exe sul dosco fisso.


Lo so che mi perdo in un bicchiere d'acqua, però 
intanto non ci riesco!


Qualcuno ha qualche suggerimento?


Thanks


Giggi



Se non hai salvato i file da quando hai aperto il progetto, la cartella
predefinita è <cartella di CBuilder>\Projects, dove BCB compila e linka
i progetti fino a che non li salvi come un altro progetto
Per il discorso della finestra evidentemente nel C++ 3 non usavi le
VCL...

-- 
Ciao, gengisdave
http://digilander.iol.it/gengisdave

Newsgroup: it.comp.lang.c
Titolo: numero di argomenti variabile

come faccio a fare una funzione che può accettare un numero di ergomenti
indefinito, magari minimo due, max quanti ne vuoi, tipo printf() ?
--
ciao
..::[xaero]::..

 tipo printf() ?
  Usi le macro va_*(). C'e` un buon esempio sul K&R2, di cui il seguente
snippet e` un clone.
<code>
void
myprintf(FILE *file,char *fmt,...)
{
  va_list    ap;
  char       *p,
          *sval;
  int      ival;
  va_start(ap,fmt);
  for(p=fmt;*p;p++) {
    if(*p!='%')
      fputc(*p,file);
    else
      switch(*++p) {
        case 'd':
          ival=va_arg(ap,int);
          /*
           * fprintf() uses an integrated algorithm to convert
           * decimals into strings we have not considered useful
           * in this context, so...
           */
          fprintf(file,"%d",ival);
          break;
        case 's':
          for(sval=va_arg(ap,char *);*sval;sval++)
          fputc(*sval,file);
          break;
        default:
          fputc(*p,file);
          break;
    } /* switch */
  } /* for */
    va_end(ap);
} /* myprintf */
</code>
	Alla prossima,
		Marco
Newsgroup: it.comp.lang.c
Titolo: help me!!!

ciao a tutti!!!!avevo bisogno di una mano!!!io so che con il c posso
gestire la rete, ma mi piacerebbe sapere cosa devo studiarmi per
gestirmela!!!!per rete intendo le porte, gli ip e quelle cose li!!!!per
esempio volessi fare un programma che controlla le porte del mio pc,
cosa devo sapere esattamente???
grazie dell'aiuto e della attenzione!!!!ah grazie anche se nn mi
rispondete!!!
p.s.:mi hanno detto che devo studiarmi il malloc...vero????cioè mi hanno
detto giusto??
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

detto giusto??
Secondo me sei un po' confuso in materia :)
Proviamo a schiarire un po' la situazione.
La malloc serve (assieme calloc, realloc e free) a gestire un
allocazione/deallocazione dinamica della memoria. Ovvero allocarti
spazio in memoria non conoscendo a priori quando (e quindi non potendo
usare variabili locali). Potrebbe servirti come potrebbe non servirti
per le applicazioni di rete.
Per il resto il tuo non e' un problema di C standard, ma dipende
strettamente dal sistema sotto cui lavori.
Sotto ogni sistema viene implementato uno stack TCP/IP (o copiato in
modo piu' o meno evidente da altri). Questo significa che hai una
serie di funzioni che ti astraggono il reale funzionamento della rete
e tu puoi tranquillamente solo usare quelle.
A questo punto tu devi decidere a che livello vuoi lavorare (quasi
certamente sceglierai il TCP, soprattutto se sei agli inizi) e usare
le funzioni opportune.
Se lavori sotto Windows ti puoi spostare su
news://it.comp.programmare.win32, mentre per Linux ti puoi spostare su
news://it.comp.os.linux.development.
Tip: prima di iniziare a programmare ti conviene studiarti un po' la
teoria, un buon punto di partenza e' lo Stevens (TCP/IP Illustrated,
volume 1).
-- 
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."

 escribió en el mensaje
news:55656b860f69adc38f8...@mygate.mailgate.org...

Il malloc lo devi studiare, te lo posso rassicurare, ma lo devi fare
qualunque sia il motivo per cui studi C.
Per gestire una rete io ti direi di leggere dei manuali su reti (come è
fatta una rete, indirizzi IP, ecc. e manuali di C. SOLO DOPO guarda dei
codici che usano tutte e due cose assieme. (sto pensando a programmi linux,
per esempio, come ping, netstat, ecc.)
Toni
e guarda che quello che vuoi fare non è roba da pocco!

 "Provide only one way to do an operation."
come mai manca l'ultima?
 "Make it fast, even if it is not guaranteed to be portable."

 "Make it fast, even if it is not guaranteed to be portable."
Perche' i primi 4 sono semplici, lineari e si commentano da soli
(senza ambiguita').
Il 5 invece e' ambiguo (per ammissione degli stessi autori dello
standard, anche se usano termini diversi) e richiederebbe una lunga
spiegazione perche' non riguarda tutto il C ma solo alcuni aspetti del
linguaggio per altro specificati espressamente (come se i char siano
signed o unsigned). Spero sarai daccordo che una trattazione simile e'
un po' oltre il concetto di firma :)


 un po' oltre il concetto di firma :)
d'accordo!
Newsgroup: it.comp.lang.c
Titolo: Piccolo problema

 Grazie.
nel tuo prog ci sono 2 problemi:
1) double media= sum/cont
viene dato il risultato intero, dovresti fare double
media=((double)sum)/((double)cont);
2) il programma non toglie eventuali duplicati, ma solo se sono uno dietro
l'altro
e poi la funzione della media sarebbe opportuno farla usando un puntatore
invece che l'array
ciao

Ragazzi il codice che segue dato un vettore s[N] di interi, restituisce la
media non considerando però gli eventuali duplicati.
Se il vettore fosse 7 6 4 6 4 la media sarà 5.6 (7,6,4).
Il mio problema è che non mi stampa la parte decimale, stampa solo 5.0.
Aiutatemi perfavore.
Grazie.
#include<stdio.h>
#define N 5
double calcola_media(int s[N]);
int main()
{
   int i, j, s[N], tmp;
   double media;
   clrscr();
   printf("Scrivi %d numeri : ",N);
   for(i=0;i<N;++i)
      scanf("%d",&s[i]);
   for(i=0;i<N-1;++i)
      for(j=N-1;j>i;--j)
         if(s[j-1]<s[j]){
            tmp=s[j-1];
            s[j-1]=s[j];
            s[j]=tmp;
         }
   media=calcola_media(s);
   printf("\nLa media è %4.2f",media);
   return 0;
}
double calcola_media(int s[N])
{
   int i, cont=0, sum=0;
   double media;
   for(i=0;i<N;++i)
      if(s[i]!=s[i-1]){
         cont+=1;
         sum+=s[i];
      }
   media=sum/cont;
   return media;
}

 }
Dato che sia sum che cont sono di tipo int la divisione eseguita è
quella intera con risultato, appunto, intero (es. 1 / 2 uguale zero e
non 0.5 come uno si aspetta). Prova
media = ( double ) sum / cont;
o qualcosa del genere.
EMG


Se ci fai caso ho usato un bubblesort per ordinarli ecco perchè dopo elimino
quelli in fila.
Grazie per il double.
Ciao.

      if(s[i]!=s[i-1]){
Attenzione! quando i==0 tu confronti s[0] con
s[-1] e questo non e' permesso. Una possibilita'
e' cambiare il loop con:
   for(i=0;i<N;++i)
      if(i==0 || s[i]!=s[i-1]){ ... }
Il problema di arrotondamento e' che la divisione
viene fatta fra interi e solo *dopo* il risultato
viene convertito in un double.
Una soluzione potrebbe essere
   media=(double)sum/count;
oppure dichiarare sum come double
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

Newsgroup: it.comp.lang.c
Titolo: Algoritmi per immagini!

qualcuno sa dove è possibile reperire algoritmi e listati in c Che
permettano di estrarre le coordinate RGB di tutti i pixel di un'immagine?
grazie


Forse non ci siamo capiti...proviamo così:
immaginiamo che tu voglia lavorare su immagini BMP...allora cerca su
internet informazioni su tale tipo di immagini e poi vedi come fare a
modificarle in C! ( :-) )
Mettiamo che tu voglia modificare una immagine JPG...
allora cerca su internet informazioni su tale tipo di immagini e poi vedi
come fare a modificarle in C!! ( :-)) )
etc...etc... ( :-D )....oppure prendi armi e bagagli e passi (come già
suggerito!) nel newsgroup adatto (Win32) dato che esistono le MFC che
sicuramente fanno al caso tuo in modo più semplice!!!

 ha scritto nel messaggio
news:a40d1d$c52$1...@lacerta.tiscalinet.it...


 ha scritto nel messaggio
news:a4416o$hdo$4...@lacerta.tiscalinet.it...

Newsgroup: it.comp.lang.c
Titolo: Apertura File

Ho fatto un prg che memorizza dei dati su un file txt mediante aperto fopen
in modalità append
i dati vengono effetivamente memorizzati dopo la chiusura del prg stesso e
non dopo la mia chiusura 
del file.
Il mio problema è che vorrei che il file quando non è aperto potesse essere
letto anche se il
prg che lo ha generato è ancora in esecuzione.
Come posso fare ?

Puoi usare int fflush(FILE *file), che č una funzione che ritorna 0 se ha
avuto successo, -1 in caso contrario. fflush forza la scrittura su disco del
file passatogli.
Esempio:
#include <stdio.h>
...
FILE *miofile
...
miofile=fopen( ...
...
int test=fflush(miofile)
...
Vi č anche la funzione void setbuf(FILE *file, char *buffer), che puoi usare
per eliminare direttamente la bufferizzazione di un file passando NULL come
buffer:
setbuf(miofile, NULL)
Per scelte meno drastiche o piů fine puoi utilizzare setbuffer o
setlinebuffer, con l'avvertenza che tutte le funzioni setxxx in questione
vanno usate subito dopo fopen, perchč cancellano il buffer del file
passatogli.
Iskandar

Newsgroup: it.comp.lang.c
Titolo: datemi un consiglio!

Scusate l'intromissione , ma visto il NG vorrei avere una vostra consulenza
in merito ad un mio dubbio:
in poche parole, vorrei finalmente imparare a programmare in C/C++
e come programma per iniziare a "rodare" ho richiesto Borland c++,
....secondo voi è la scelta giusta per un neofita del C ??!
Oppure era meglio qualcos'altro ??
grazie a tutti.....  :-)

...


Oppure era meglio qualcos'altro ??
Questa domanda e' probabilmente la piu' frequentemente
posta in questo gruppo, anche se, di solito, nella forma "cosa
mi conviene fare" piuttosto che "ormai ho gia' fatto cosi', vorrei
sapere se mi conviene rodermi il fegato", visto che, avendo
gia' preso la decisione, rodersi il fegato non conviene mai:-).
Puoi consultare le infinite discussioni in merito in questo
gruppo (e infinite altre discussioni, anche piu' costruttive,
in questo ed in altri gruppi) usando il sito:
 
http://www.dejanews.com/
e specificamente la sua funzionalita' di "power search", che
ti permette di specificare it.comp.lang.c++ come "forum" da
frugare, un certo periodo di tempo, gli autori che ti interessano,
le parole-chiave da cercare, e quant'altro.
Alex

Newsgroup: it.comp.lang.c
Titolo: C tutorial per principianti

cosa mi consigliate come manuale da neofita del C? Esistono tutorial
scaricabili in rete? 
Grazie
Ritch
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Esistono tutorial scaricabili in rete? 
http://tinyurl.com/c3okl


 scaricabili in rete? 
http://programmazione.html.it/c/
lo consigliava il mio prof.. sembra adatto ai principianti..
-- 
[Filippo...........................]
[Linux User #342745................]
        ==[...penguin powered...]==
Newsgroup: it.comp.lang.c
Titolo: divisione interi risultato intero

ciao a tutti,
ho un piccolo problema che proprio non capisco,
ho due interi :
int tottrue, m;
ed un double:
double val;
m e tottrue vengono incrementati in base a delle condizioni ed m è
sempre piu grande o al piu uguale a tottrue
quando faccio :
val = (double)(tottrue / m);
e provo a stampare il risultato
printf("val = %.3f\n", (double)val);
mi stampa sempre 0 anche se facendo la divisione sulla calcolatrice il
risultato è 
0.xyz
 (con xyz > 0) è banalissimo ma non va!! sono su
windows Vista e compilo ed eseguo con Dev-Cpp!! che succede che nn va?
Grazie

 mi stampa sempre 0 anche se facendo la divisione sulla calcolatrice il
E' il normale comportamento del C: il tuo errore e' che il cast a
double lo fai troppo tardi.
Separando l'assegnazione in passi (supponiamo tottrue=2 e m=3:
- esegui tottrue / m  --> 2 / 3 = 0
- converti a double --> 0 diventa 0.0
- assegna a val
Devi eseguire il cast prima della divisione:
val = ((double)tottrue) / m
a questo punto la divisione e' 2.0 / 3 -> 0.666667
ciao
Giacomo

On 25 Set, 10:15, Giacomo Degli Esposti

gia bastava fare il cast su tottrue ed m ho risolto
val = ((double)tottru / (double)m)
grazie mille!!!

> val = ((double)tottru / (double)m)
Il cast di m e' superfluo :-)


anche le parentesi
val=(double)tottru/m;
Si sono pigro ;-)

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

Mi è capitato questo caso:
    char *strLstrip(char *S, char C){
    int p;
      while (S[0]==C){
        p=0;
        while (S[p])  S[p]=S[++p];
      }
      return S;
    }
Quando compilo senza ottimizzazione, tutto ok, mentre quando
uso -O2 non funziona più. Il problema sta nel ciclo che
trasla la stringa a sinistra di una posizione:
        while (S[p])  S[p]=S[++p];
che viene compilato in questo modo:
    0x1000285c <strLstrip(char *, char)+28>:	addi	r11,r11,1      r11 e' p
    0x10002860 <strLstrip(char *, char)+32>:	lbzx	r9,r3,r11      r3 e' S
    0x10002864 <strLstrip(char *, char)+36>:	mr	r0,r9      (che ottimizzatore
    0x10002868 <strLstrip(char *, char)+40>:	cmpwi	r0,0        idiota
:6        )
    0x1000286c <strLstrip(char *, char)+44>:	stbx	r9,r3,r11
    0x10002870 <strLstrip(char *, char)+48>:	bne	0x1000285c <strLstrip(char *,
char)+28>
++p viene eseguito all'inizio (0x28), quindi l'istruzione diventa
l'equivalente di  p++;S[p]=S[p];  che chiaramente non funziona.
Commenti ?
Bye.

         while (S[p])  S[p]=S[++p];
Undefined behaviour; stai modificando e leggendo la stessa variabile
tra due sequence points.  Per maggiori informazioni, c'e' la FAQ list
di comp.lang.c in 
http://www.eskimo.com/~scs/C-faq/top.html
 ; leggi i
punti 3.1 e successivi.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it

 punti 3.1 e successivi.
Tnx.
Bye.
Newsgroup: it.comp.lang.c
Titolo: quadro delle istruzioni e funzioni c

siccome sono ancora alle prime armi con il linguaggio di programmazione
c vorrei sapere se in rete ci sono degli specchietti in cui siano
rappresentate in maniera schematica le principali funzioni e le
principali istruzioni con dei piccoli promemoria che ne ricorda
l'utilizzo. A me sarebbe molto utile dato che non ho ancora ben chiaro
in testa uno schema di questo tipo.

 in testa uno schema di questo tipo.
Sarebbe utile anche a me...

Date un'occhiata al progetto "c/c++ reference"
http://www.cppreference.com/

 
Io mi trovo molto bene con il libro "Linguaggio C" terza edizione di 
Shildt (McGrawHill). Non c'è uno "specchietto" ma le funzioni sono 
sempre spiegate in poche righe e avendolo sottomano ricerchi MOLTO in 
fretta e ottieni subito una conoscenza "di base" della funzione che ti 
interessa.
	ciao, rz
-- 
http://mrzac.altervista.org

Newsgroup: it.comp.lang.c
Titolo: Salary expectations in Milan, Italy

Hi,
I am planning to move to Milan, Italy to be with my girlfriend there.
I am a strong Java and C developer with 2 years of Java experience in EJB,
JSP, Servelets, JDBC, C, C++
What salary should I be looking there???
Any advice will be highly appreciated.
Thanks and Regards
Amit

 salary should I be looking there???
  First of all, I suggest you to learn the Italian language...
	Best regards,
		Marco
PS Of course, 'it' stands for the Italian Usenet hierarch and not for
"Information Technology.
Newsgroup: it.comp.lang.c
Titolo: Turbo C e Microsoft C----> Problemi con una libreria

Ho un programma scritto per comandare un terminalino lettura codici a barre
scritto in C; Viene fornita una libreria LIB600.LIB a 32 bit e un header
file LIB600.H da usare, dice il manuale con Microsoft C v. 7 o 8
Io ho sempre usato il Turbo C Borland , conoscenza media del linguaggio C e
non riesco a creare l'eseguibile poiche' mi da errore di Linkaggio dicendo
che i simboli non sono definiti da nessuna parte!
Che devo fare?? Non posso creare l'eseguibile con il Turbo C? o devo
inserire istruzioni particolari per farglielo digerire??
Nell'Header file LIB600.H c'e' una riga che il compilatore non mi riconosce
e io non so che vuol dire
#pragma comment(lib,"LIB600.lib")
Cosa vuol dire???
La direttiva comment in Turbo C non c'e'!!!!
Se qualcuno mi sa dare una mano ringrazio anticipatamente o se qualcuno sa
dove posso trovare il compilatore Microsoft C ormani neanche piů
pubblicizzato da Microsoft??
Luigi


Non sono sicuro per la tua libreria, ma proverei ad inserire la LIB600.LIB
nel progetto
(come aggiungi un file .C puoi anche aggiungere una libreria).
Piu' facile se fa una copia della tua libreria nella stessa cartella del tuo
sorgente.
Cmq. ho dei dubbi per il fatto che sia a 32 bit.
Forse dovresti a questo punto trovare una libreria LIB600 per il compilatore
in
questione, aggiornato...
Mi sembra piu' facile trovare il Microsoft C...
J.


Prova a postare i messaggi di errore del linker e vediamo cosa si puo'
fare, magari in email, per non essere troppo OT.
ciao
donCiccio

La direttiva comment in Turbo C non c'e'!!!!
E' una direttiva che forza il linker a cercare le funzioni prima nella
libreria LIB600.LIB, e poi eventualmente nelle librerie standard, la
libreria deve essere nel path di ricerca specificato dalla variabile
d'ambiente %LIB%.
NB: Tutto cio' vale solo per il compilatore di Micro$oft
ciao, acc.   
a...@libero.it

Newsgroup: it.comp.lang.c
Titolo: Pigiando un tasto...[+Saluto] =)

Salve sono nuovo su questo NG.
Allora, per piacere, mi servirebbe una funzione che fa terminare il
programma dopo aver premuto ad esempio il tasto "Esc", ho letto su varie
pagine web di utilizzare la funzione "kbhit" che è contenuta nella libreria
"conio.h", ma non ho capito come utilizzarla anche cercando con Google mi
aiutate per piacere?
Grazie. ;)
ByEz!!


Leggi la documentazione MSDN c'č anche un esempio.ciao
Newsgroup: it.comp.lang.c
Titolo: Leggere files in input in funzione di una data variabile. (?)

Il problema è il seguente:
vorrei leggere (aprire, caricarne i dati in una matrice apposita e richiudere il
file, ma non è questo il problema) un certo numero di file con nome diverso a
seconda del valore di una data variabile;
1) è possibile "costruire dinamicamente" il nome del file da aprire?
es. se var==2 => aprire, caricare e chiudere, successivamente, file1.dat e
file2.dat
come? ... grazie.
---
Feld

run...@usa.net
 (Feldschlösschen) writes:

char filename[LONG_ENOUGH];
sprintf(filename, "file%d.dat", var);
if ((fp = fopen(filename, ...)) != 0) {
  ...
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it

 aprire?
  In C tutto e` possibile. Invece la domanda da farsi, generalmente, e`:
non c'e` qualche strumento che permette di farlo piu` facilmente (i.e.:
PERL).
  Ad ogni modo: il C ha una fornita libreria di funzioni che operano
sulle stringhe e, naturalmente, sui file. All'uopo:
<cons>
	$ man 3 strcat
	$ man 3 strcpy
	$ man 3 fopen
</cons>
	Alla prossima,
		Marco

>[...]
grazie, č proprio cio' che risolve il mio (banale) problemuccio!
--
Feld

  Ad ogni modo: il C ha una fornita libreria di funzioni che operano
<ringraz>
anche se non sto usando linux ("man") la tua dritta suggeriva esattamente! ;-)
grazie
<\ringraz> ;-)
Ma il programmatore che usa linux quale programma usa per editare/debuggare le
proprie "creazioni" in C?
--
Feld

 per editare/debuggare le proprie "creazioni" in C?
  vi & linea di comando, naturalmente. :)
	Alla prossima,
		Marco

 
Argh! vi, il mio incubo peggiore! In laboratorio ci costringevano ad
usarlo, tenendoci nascosto il fatto che era installato anche nedit...
--
 Ciao, Luca.
 Reply to 
luca....@tiscalinet.it
Newsgroup: it.comp.lang.c
Titolo: [?]Strncmp

-- 
Salve , ho dei problemi ad utilizzare la funzione strncmp();  uso Djgpp
se la uso in questo modo
strncmp(a12[i],a12[i+i1],3)  , il compilatore mi informa di un errore 
passing arg make a pointer without a cast , o una cosa del genere
c'è qualcuno che sa darmi info?
Grazie 
Ciao  Roberto
rober...@inwind.it


bisogna vedere come hai definito a12[]
mi butto ad indovinare:
char a12[12];
se e' cosi' a12[i] e' un char
ma strncmp  ti richiede che i due
argomenti siano puntatori a carattere (char *).
Prova:
char a[12]="pippo";
char b[12]="pippo1";
strncmp(a, b, 6);
non dovrebbe darti piu' errore e dirti che le stringhe sono diverse...
Arrivederci ...a Lunedi.
                        Andrea Zaghi


wrote:
perché richiede dei puntatori, e tu invece gli stai passando dei
semplici caratteri!
metti davanti ai simboli & per passare la locazione dell'oggetto
in memoria, e quindi soddisfare le richieste della funzione
cod
Newsgroup: it.comp.lang.c
Titolo: Socket, Rete & Internet

Salve a tutti. La mia domanda é la seguente:
ho scritto due semplici applicazioni client/server che comunicano tramite i
socket; in una intranet funziona tutto beissimo, avvio il server su una
macchina e poi lancio il client da un'altra macchina, fornendogli l'IP della
macchina su cui gira il server.
Finqui tutto ovvio; ma se volessi usare le mie applicazioni su Internet,
lanciando il server su una machina Windows remota comunissima che possiede
un modem e lanciando il client dal mio PC, come devo fare? L'IP del PC su
cui gira il server non lo conosco e nemmeno posso conoscerlo, perché é
dinamico, quindi la connessione via socket non può avvenire, giusto? E
inoltre anche installando un server web sul PC server non otterrei nulla.
Allora come si fa?
(Scusate la domanda da inesperto, ma é un mio dubbio amletico).

,

     DIAL-UP                INTERNET                   DIAL-UP
SERVER      ISP1-PPP-SERVER          ISP1-PPP_SERVER         CLIENT
Diciamo che quello che vuoi fare e' realizzato come sopra, senza
firewall (che consentono il traffico su certe porte in una certa direzione)
e senza proxy (che forwardano le richieste e risposte HTTP usando una sola
porta). Hai ragione, dato che SERVER ha un ip dinamico non lo puoi contattare
se non conoscendo l'indirizzo diretto che ha in quel momento, oppure
il nome DNS (pure 'estemporaneo').
La soluzione e' qualle di usare un server terzo. Quando SERVER si connette
alla rete, annuncia questo fatto (tipo ICQ). Esisteva un DNS che registrava
al volo degli IP dinamici. Non spo si questo servizio sia ancora disponibile.
Se entrambi (CLIENT e SERVER) usano lo stesso DNS e la registrazione
del nome del server e' dinamica ed e' sempre la stessa, allora il
client puo' connettersi al server. Senza IP no si fa nulla.
Se anche poi avessi l'IP del tuo server, e ne mezzo ci sono firewall
e/o proxy, allora devi assicurarti che il tuo traffico sia consentito
ed abilitato.
-----------== Posted via Deja News, The Discussion Network ==----------
http://www.dejanews.com/
       Search, Read, Discuss, or Start Your Own    

Puoi fare in modo che il server ti invii un email in modo automatico
non appena si collega al provider, comunicandoti il suo IP
Newsgroup: it.comp.lang.c
Titolo: perchè!!

l'istruzione che segue
qsort(*base,size_t nelem,size_t width,(*fcmp)(const void *, const void *));
non funziona con il compilatore turbo c++ 3.0  ???????
Grazie Kikko



Sicuro che sia la qsort ? io ne dubito molto. 
Compila il codice seguente:
#include <stdio.h>
#include <stdlib.h>
int compare_integers(const void *vpa, const void *vpb)
{
    int *ipa = (int*)vpa, *ipb = (int*)vpb;
    if (*ipa == *ipb) return 0;
    else
    if (*ipa < *ipb) return -1;
    else
      return 1;
}
void write_array(int *p, int n)
{
     int i;
     for (i = 0; i < n; i++)
     {
         printf("%d; ", p[i]);
     }
     printf("\n");
}
int main()
{
    int vettore[] = { -3, 6, 4, 2, -1, 0, 3, -12 };
    int n = sizeof vettore / sizeof vettore[0];
    puts("before sorting:");
    write_array(vettore, n);
    qsort(vettore, n, sizeof vettore[0], compare_integers);
    puts("after sorting:");
    write_array(vettore, n);
    return 0;
}
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]

 Sicuro che sia la qsort ? io ne dubito molto.
Sicuramente mi sbaglio anche perchč sono solo 2 mesi che studio il c.
Puoi dirmi in questo codice dove sbaglio???
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 2
#define M 10
int ordina(char **ptr1, char **ptr2)
{
 return(strcmp(*ptr1,*ptr2));
}
void main()
{
     char array[N][M];
     char *ptr_array[N];
     char array_key[N];
     char *ptr_key=array_key;
     char **ptrk_key;
     char controllo;
     int i;
     for(i=0;i<N;i++)
          ptr_array[i]=array[i];
     for(i=0;i<N;i++)
     {
          printf("INSERISCI NOME!!!!\n");
          scanf("%s", array[i]);
     }
     qsort(ptr_array,N,sizeof(char*),ordina); /*quě il compilatore mi dice
che c'č un errore, ho visto anche la sintassi sull'help ma non riesco a
capire*/
     printf("QUESTI SONO I NOMI ORDINATI ALFABETICAMENTE!!!\n");
     printf("%s\n", ptr_array);
Ti ringrazio tanto
Kikko

Errore gravissimo e senza senso...
printf("QUESTI SONO I NOMI ORDINATI ALFABETICAMENTE!!!\n");
     printf("%s\n", ptr_array);
rimedio subito:
for(i=0;i<N;i++)
{
    printf("QUESTI SONO I NOMIORDINATI ALFABETCAMENTE!!!!\n");
    printf("%s\n", ptr_array[i]);
}
perdonatemi ma la concentrazione comincia a scarseggiare ^_^
Kikko


non ho ne provato a compilare ne mi sono messo a capire se il tutto e'
giusto, ma credo che il tuo problema sia un warning dovuto al tipo errato
della funzione "ordina", la devi dichiarare come dice l'help
int ordina( const void *ptr1, const void *ptr2 )
poi all'interno usi il cast o altre 2 variabili per convertire ptr1 e ptr2
al tipo che ti serve.
ciao
donCiccio
Newsgroup: it.comp.lang.c
Titolo: [p] - refevrtkmnsbasctr

Quanto cielo,
ammazzato dal sangue,
veniva spazzato dal vento:
come acquisto per l'eternità,
piuttosto che come declamazione
per l'ascolto di un momento,
per un flan al cioccolato,
per un terzino fluidificante,
per un ammortizzatore di sterzo,
per un servizio liftato,
per la pantonalità schoenberghiana,
per... io voglio bere
protoliberismo smithiano quindi sciopero
della sete sete sete sete,
è stata composta la tua storia:
o Tucidide, filokalumen
kai filosofumen...noi: c'è tempo
per lavarsi nella lava: è
tempo di cardinali di Ramsey e
di estensioni di Kan.
    Sergio

sono un genio.
sě!

 ha scritto nel messaggio
news:0tgTa.195773$lK4.5...@twister1.libero.it...


Quanto cielo,[...]
Stai per essere segnalato all'indirizzo: 
ab...@net24.it
-- 
Andrea Laforgia
Open Delphi Manual
http://groups.yahoo.com/group/delphi_open_manual/

 [p] per cosa stai?
Sta per "Porca vacca impara a quotare" e "Per favore ignora i troll".
Kronos
-- 
Home: 
http://kronoz.cjb.net
La differenza fra l'intelligenza e la stupidita`?
All'intelligenza c'e` un limite.

> [p] per cosa stai?
ti disprezzo per la tua stupiditą: per questo motivo ti killo.

> Stai per essere segnalato all'indirizzo: 
ab...@net24.it
mi vuoi segare l'account perché dico ciò che realmente penso?

> Stai per essere segnalato all'indirizzo: 
ab...@net24.it
non ti rispondo come sono solito fare perché ti conosco.
Newsgroup: it.comp.lang.c
Titolo: problema stack

salve a tutti,
ho un problema con questo programma,mi da come output solo :  0 ->
why? grazie a tutti.
struct stack{
int data;
struct stack *next;
};
typedef struct stack Stack;
void push(void *,int);
void print(void *);
void * createstack();
main(){
Stack *one;
one=createstack();
push(one,2);
push(one,5);
print(one);
}
void * createstack(){
Stack *s;
s=(Stack *)malloc(sizeof(Stack));
s->next=NULL;
s->data=0;
return((void *)s);
}
void push(void *s,int val){
Stack * new;
new=(Stack *)malloc(sizeof(Stack));
new->data=val;
new->next=((Stack *)s);
((Stack *)s)=new;
}
void print(void * s){
while(((Stack *)s)!=NULL){
printf("%d->",((Stack *)s)->data);
((Stack *)s)=((Stack *)s)->next;}}

 
Il problema e` che la funzione  void push(void *s,int val) effettua uno 
strano inserimento in testa allo stack s (implementato a lista 
unidirezionale) ma il tuo puntatore s continua a puntare all'ultimo 
elemento della lista (che e` il primo elemento inserito e che contiene 
come val il valore 0 (vedi  void* createstack() )).
Lo scorrimento dello stack implementato a lista unidirezionale e` 
possibile in una sola direzione (appunto) a partire dall'ultimo elemento.
In sostanza perdi ogni riferimento ai nuovi vagono inseriti nella 
lista!!! 
Soluzione:
void push(void *s,int val){
 
 Stack * new;
 
 new=(Stack *)malloc(sizeof(Stack));
 
 new->data=val;
 
 new->next = ((Stack *)s)->next;
 ((Stack *)s)->next = new; 
}
Ciao!!!
Ale.
Inviato da 
www.mynewsgate.net

 ha scritto:

Inviato da 
www.mynewsgate.net

grazie mille ale sei stato gentilissimo,gli errori erano banali..hai ragione
su tutto
a presto Ste

> s=(Stack *)malloc(sizeof(Stack));
Qui` invece c'e` un cast di troppo.
Luca
-- 
Home: 
http://kronoz.cjb.net
La differenza fra l'intelligenza e la stupidita`?
All'intelligenza c'e` un limite.
Newsgroup: it.comp.lang.c
Titolo: DJGPP: perche' l'exe non gira ovunque?

Ho iniziato da poco ad utilizzare il DJGPP e l'eseguibile che ho fatto non
gira su tutte le macchine (che sono uguali), ma solo su quelle dove il DJGPP
e' istallato. Perche'? E come faccio a eliminare il problema?
Ringrazio anticipatamente chi puo' cortesemente darmi un consiglio.
Amerigo D'Amico.
_______________________________________________________
Excite Inbox: la tua email gratuita e personalizzabile
http://inbox.excite.it
Il Mio Excite
http://www.excite.it
A.A.A. Relazioni: trovare l'amore non è mai stato più facile
http://aaa.excite.it/relazioni
-- 
Posted from 
bucky-rwcmex.excite.com
 [198.3.99.218] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

P e' istallato. 
Ma ne sei proprio sicuro?  perchč non credo c'entri niente che il
djgpp sia istallato o meno; che io sappia i programmi compilati non
hanno bisogno di una libreria a run time (come ad esempio il mingw32
se non sbaglio), quindi dovrebbero funzionare comunque...
ciao

 se non sbaglio), quindi dovrebbero funzionare comunque...
Solo se girano sotto MS-DOS "puro" hanno bisogno di un DOS-extender
(fornitore di servizi DPMI) del quale non ricordo il nome.
EMG

Newsgroup: it.comp.lang.c
Titolo: Usare i colori

Come utilizzare i colori per il testo in C sotto Linux???
Grazie
--
-----------------------------------------------
Andrea Sistarelli - Terni - Italy
si...@freemail.it
si...@softhome.net
 - Solo per gli attachment
ICQ: 11598516
-----------------------------------------------


ICQ #34602650

Newsgroup: it.comp.lang.c
Titolo: Colori in C (Linux)

Ciao a tutti!!!
E' possibile, programmando in C in Linux, variare i colori sullo schermo
o i colori dei caratteri scritti con printf?
Perchč so che Borland mette a disposizione delle funzioni come
textcolor()
textbackground()
cprintf()
............
Esistono delle funzioni corrispondenti in Linux? Se si, come faccio a
conoscerle, dato che ho provato a cercarle ma senza risultato..
Thanks
Mauro

 o i colori dei caratteri scritti con printf?
Si, usando delle librerie apposite, come le ncurses o le slang.
Spostati su it.comp.os.linux.development
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)              [ 
http://digilander.iol.it/ebassi/
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4
Newsgroup: it.comp.lang.c
Titolo: Possibile? Getch()....

Possibile che il compilatore non accetti l'istruzione getch() per il
mantenimento della finestra?
Eppure includo le conio.h .... ma mi dà sempre errore in riferimento al
getch()... se lo tolgo va tutto bene, ma la finestra si chiude subito.
Uso Dev-c++ ..... come posso fare per risolvere il problema?
Grazie a tutti!.
Ciao!.

 Uso Dev-c++ ..... come posso fare per risolvere il problema?
getchar()
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Not an editor command: Wq

> getchar()
Così lo prende, ma la finestra si chiude subito ugualmente!.... Devo
aggiungere qualcosa?
Già che sono qui vorrei sapere come devo scrivere in Dev-c++ "clrscr()" e
"gotoxy".... poichè non gli vanno bene nemmeno questi!.
Grazie per le risposte,
ciao!.

 "gotoxy".... poich? non gli vanno bene nemmeno questi!.
Non  esistono  dei  rimpiazzi  standard,  devi  appoggiarti  a  librerie
specifiche. Le  ncurses,  ad  esempio, offrono  un'ottima  gestione  del
terminale e sono portabili.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Ci sono due cose che l'uomo non puo` nascondere:
essere ubriaco ed essere innamorato.

 getchar();
Grazie mille,
cosě funziona tutto alla perfezione!.
Ciao!.
Newsgroup: it.comp.lang.c
Titolo: GETS() ed EOF

Ho pensato di usare la GETS() per l'imput di una frase , per il fatto
che sostituisce il newline con il terminatore.
Ma se inserisco un EOF come primo carattere di imput la GETS() mi va
avanti lo stesso , anche se controllo con un IF il tutto :
 /* Chiede la frase : se non ci sono caratteri esce */
 gets(" %s", frase) ;
 if ( (*frase == NULL) || (*frase == EOF) )
      puts("Nessuna frase ! \n") ;
Come devo fare per fare in modo che mi esca correttamente dal ciclo ?
Se non posso con la GETS() , quale funzione devo usare ?
Ciao e grazie :-)
P.S: Per favore rispondetemi in email
mailto:
mg...@polbox.com

Se non posso con la GETS() , quale funzione devo usare ?
fgets() e' senza dubbio migliore.

 wrote:
[ snip ]
G> gets(" %s", frase) ;
   ^^^^^^^^^^^^^^^^^^
Prendi un testo di C e comincia a studiare...
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

       printf ( "Nessuna frase\n" ) ;
Vuol dire :
"Se gets(s) restituisce niente allora printf("Nessuna frase\n" 


Prendi un testo di C e comincia a studiare...
Lo sto facendo , ma avevo scritto (mi sembra) :-)
gets(frase)


gets(frase)
no, no, hai scritto proprio cosi' ! ;), ma probabilmente eri reduce da
una prova con scanf()...

?
Esatto, ed e' il caso che si presenta anche al termine del file.

una prova con scanf()...
E' vero,infatti mi ricordo di avere provato con scanf() :)


un char.
Il passo 1) l'ho capito , ma per il passo 2) ho dei problemi...
Se definisco una costante intera , per esempio una cosa del genere :
#define BELL	0x7 
(Su questo numero ho seri dubbi..ma tanto e' un esempio =:)
Perche' non ha molto senso fare un confronto del tipo...
if ( * ch == BELL)


if ( * ch == BELL)
Innanzitutto se ch e' dichiarato come 
char ch ;
il confronto e' 
if (ch == BELL) ...
Comunque, questo e' un caso differente.
Il principio e' quello che in C i caratteri in input, quando prelevati
tramite getchar(), sono restituiti come interi.
Questa scelta e' motivata dal fatto che getchar() deve segnalare
l'avvenuto raggiungimento della fine del buffer di input e lo fa
restituendo un valore -1 (o meglio EOF, che potrebbe anche non essere
-1) diverso da tutti i valori assumibili dal tipo char.
Questo non significa che nell'input esiste un carattere con codice
numerico rispettivo uguale a -1.
E' per questo che l'espressione seguente :
(*frase == EOF)
fallisce sempre (a meno che il carattere in questione non equivalga al
valore massimo assumbile dal tipo char, nel quale verrebbe convertito
EOF (se == a -1) ).