mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: Nei meandri dell'I/O bufferizzato

Salve a tutti,
ho iniziato a studiare il K&R (2a ed.) e ad affrontare i suoi avvincenti
esercizi. Sono arrivato al 4.7 che enuncia:
Si scriva una funzione ungetstr(s) che possa accantonare un'intera
stringa in ingresso già letta. E` più opportuno che ungets interagisca
con buf e bufp, o che si limiti a invocare ungetch?
buf, bufp e un ungetch fanno parte di un esempio precedente e, nella mio
sorgente, sono stati riportati senza modifiche. Dopo aver scelto di
usare ungetch piuttosto che manipolare direttamente il buffer di input,
ecco il codice che ho prodotto:
#include <stdio.h>
#define MAXSTR	10
int	getch(void);
void	ungetch(int);
void	getstr(char [], int);
void	ungetstr(char []);
int
main(void) {
	char choose = 'n';
	char str[MAXSTR];
	printf("Inserire una stringa: ");
	do {
		getstr(str, MAXSTR);
		printf("Stringa attuale: %s", str);
		printf("\nDigita:\n\tn: nuova stringa\n\ta: accoda stringa\n\te:
esci\n? ");
		switch (choose = getchar()) {
		case 'n':
			printf("Inserire una stringa: ");
			break;
		case 'a':
			ungetstr(str);
			break;
		case 'e':
			break;
		default:
			printf("Comando sconosciuto.\n");
			break;
		}
	} while (choose != 'e');
	return 0;
}
void
ungetstr(char s[]) {
	int i;
	for (i = 0; s[i] != '\0'; i++)
		;
	for (i--; i >= 0; i--)
		ungetch(s[i]);
}
void
getstr(char s[], int lim) {
	int c, i;
	for (i = 0; (c = getch()) != '\n' && i < lim; i++)
		s[i] = c;
	s[i] = '\0';
}
#define BUFSIZE 100
char	buf[BUFSIZE];
int	bufp = 0;
int
getch(void) {
	return (bufp > 0) ? buf[--bufp] : getchar();
}
void
ungetch(int c) {
	if (bufp >= BUFSIZE)
		printf("ungetch: troppi caratteri\n");
	else
		buf[bufp++] = c;
}
Sebbene l'esercizio richiedesse la scrittura di ungetstr(s), ho deciso
di costruire un piccolo programmino per mettere alla prova questa
funzione, di conseguenza ho scritto getstr per interagire col buffer e
ho unito il tutto nel main(). Tuttavia, dopo aver inserito la prima
stringa, sebbene riesca anche ad accodarla correttamente nel buffer con
ungetstr, il programma sembra non riuscire a leggere ulteriori stringhe
in input.
Ho cercato di comprendere questo comportamento e sarei spinto a supporre
che il problema sia in getstr, nel cui ciclo for la funzione getch(), a
buffer vuoto, chiama a sua volta getchar() ma esce immediatamente, senza
dare la possibilità all'utente di inserire alcun input e restituendo
quindi una stringa vuota.
Vi ringrazio per l'attenzione e per ogni eventuale contributo.
Marco Castronovo

 quindi una stringa vuota.
Esatto. Esaminando con un debugger il flusso del programma dovresti aver
visto che getchar() restituisce correttamente '\n', e sua volta questo
fa terminare la getstr().
Luca
-- 
Home: 
http://kronoz.cjb.net
Runtime error 6D at f000:a12f : user incompetente

 esce immediatamente perché legge il newline di prima.
Grazie per l'aiuto Luca!
P.S. vedo con piacere che non sono l'unico che sta davanti al pc nelle
ore della notte :)
Marco
Newsgroup: it.comp.lang.c
Titolo: Controllo esistenza file

Se devo scrivere su un file in modalità "a" non ho problemi, però il 
programma se non trova il file lo crea, invece vorrei che si fermasse se 
non lo trova. Per farlo, mettendo in if il fopen con modalità "a" non lo 
controlla... allora devo provare ad aprirlo in lettura?
Se lo legge bene, chiude il file e continua, se non lo legge si ferma...
E' giusto?
Grazie ciao

Se vuoi controllare che il file esista, aprilo con fopen in modalità "r", se
ti restituisce un puntatore null, il file non esiste!!!
--------------------------------
Inviato via 
http://usenet.libero.it


Hai provato con "r+"?
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

 Hai provato con "r+"?
Si ma lo crea se non c'č, con un "r" in un if, invece, lo controllo e se 
non c'č il programma si ferma (come voglio io), mi funziona alla perfezione.
Grazie ciao

 non c'č il programma si ferma (come voglio io), mi funziona alla perfezione.
Eccoti un esempio funzionante con "r+" che non crea affatto il file se
non esiste:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *fp = fopen( "PEPPE.XXX", "r+" );
    if ( !fp )
    {
        printf( "Errore!\n" );
        exit( 1 );
    }
    fclose( fp );
    return 0;

Newsgroup: it.comp.lang.c
Titolo: Cercare in tutto l'HD...

Ciao a tutti, esiste un modo per cercare un file in tutto l'HD? (Uso Win98)
Grazie 1000!
Enrico S.
--
Webmaster della Pagina NON Ufficiale del SonyCRX100
SonyCRX120,  SonyCRX140E/S, SonyCRX100EX, HP8100
HP8200, HP9100 & HP9200
http://www.freeweb.org/computer/SonyCRX100/

Ciao a tutti, esiste un modo per cercare un file in tutto l'HD? (Uso Win98)
Start -> Trova -> File o cartelle
Metti il Nome del file, nel campo "Cerca in" scegli il disco e barri
la casella "Ricerca nelle sottocartelle"
NB: La prossima volta usa il NG adatto, qui sei OT
ciao, acc.   
a...@libero.it

Sorvolando sulla tua ironia (a tratti veramente povera), non mi sembra di
essere del tutto OT...forse riformulando la domanda potrò avere la giusta
risposta: esiste un modo per creare una funzione in linguaggio C che mi
permetta di cercare un file non solo in un dir ma in tutto l'HD (findfirst /
next non sono utili a quanto ho visto)?Sistema operativo Dos/Win.
Grazie 1000 a tutti


 operativo Dos/Win.
rivolgiti su it.comp.programmare.win32, non esiste un modo di fare 
quello che chiedi in C portabile, oggetto di questo NG

Questa è una risposta chiara e costruttiva, ti ringrazio, mi rivolgerò
all'altro gruppo. Il fatto è che pensavo esistesse una funzione analoga a
findfirst...


next non sono utili a quanto ho visto)?Sistema operativo Dos/Win.
Scusa se ho capito male, ma se rileggi il tuo post noterai che
effettivamente non ti sei spiegato molto chiaramente...
Comunque l'unico metodo e' quello di usare findfirst/findnext,
ripetendo il ciclo dove trovi delle directory.
ciao, acc.   
a...@libero.it

 ripetendo il ciclo dove trovi delle directory.
E questo il punto, come faccio a sapere che ha trovato una dir o a fargliela
trovare?
Grazie 1000 per l'aiuto
Enrico


trovare?
Nota:   xxx / yyy = c.m$ / c.borland
Leggi la struttura _find_t / ffblk, c'e' un byte (attrib / ff_attrib)
che specifica gli attributi del file, nell'header (dos.h / dir.h) ci
sono delle manifest constant gia definite per agevolare il test, in
particolare _A_SUBDIR / FA_DIREC.
es per microsoft (solo l'essenziale):
struct _find_t find;
char *tipo;
if (! _dos_findfirst("*.*", 0xFFFF, &find)
  while (! _dos_findnext(&find) {
    if (find.attrib & _A_SUBDIR)
      tipo = "Directory";
    else if (find.attrib & _A_VOLID)
      tipo = "Label";  // etichetta di volume del disco
    else
      tipo = "file";
    printf("%-12s %s\n", 
find.name
,  tipo);
  }
Nota: nella findfirst() ho usato 0xFFFF come attributo, che significa
trova i file con qualsiasi attributo, se vuoi cercare file con
attributi particolari puoi specificarli nella chiamata, es:
_dos_findfirst("*.*", _A_SUBDIR, &find)
= solo directory
_dos_findfirst("*.*", _A_SUBDIR | _A_VOLID, &find)
= solo directory ed etichetta di volume
_dos_findfirst("*.*", 0xFFFF & ~_A_HIDDEN & ~_A_SYSTEM, &find)
= tutti eccetto file nascosti e di sistema
ciao, acc.   
a...@libero.it

"acc" ha scritto:
[...]
e se faceste sfoggio di tutta questa cultura microsoftiana nel NG 
adeguato?
Newsgroup: it.comp.lang.c
Titolo: scrivere nell'exe

salve,
volevo sapere se esiste un modo per cambiare il file eseguibile a run-time;
quello che dovrei fare e' un prog. su file unico eseguibile che possa 
registrare quante volte viene chiamato senza creare altri file e che se 
ne ricordi anche dopo il reboot.
grazie
Leo

 ha scritto nel messaggio
news:3D269EA5...@tiscalinet.it...

Se sai il linguaggio assembler, potresti tentare di integrare nel codice c
un listato in assembler, con la keyword "asm", che copi alla fine del
segmento di memoria del programma un contatore, per poi salvarlo insieme
all'eseguibile.
Il contatore, naturalmente, dovrebbe essere aggiornato ad ogni avvio
dell'eseguibile.
E' più o meno la stessa tecnica che usano per fare i virus che infettano i
file *.com o *.exe.
Usando solo il c, non saprei veramente cosa fare.
Ciao,
                Alessandro



La butto li.. 
Puoi provare a creare una stringa inizializzata a "MARKERXX".
Poi scrivi una routine che cerca la stringa "MARKER" nel file eseguibile
e subito dopo va a leggere e scrivere quello che serve. Ovvio che la
prima volta devi sostituire "XX" con un intero messo a zero..
-- 
Per rispondere via email rimuovere 123



scrivere semplicemente in fondo al file e poi leggere da quell'offset
come se fosse un file di configurazione no eh?
non serve complicarsi tanto la vita.

non serve complicarsi tanto la vita.
Ma su windows puoi scrivere sui file in uso?
Qui siamo OT, f-up e x-post su it.comp.programmare.win32.
-- 
Marco Barisione (ICQ 84277092)

 ha scritto nel messaggio
news:3D269EA5...@tiscalinet.it...

ecco la mia idea (da verificare e completare con i controlli di errore):
int counter;
FILE * f=fopen( "file.exe","ab" );
fseek( f,-sizeof( counter ),SEEK_END );
fwrite( &counter,sizeof( counter ),1,f );
fclose( f );
ricordati di aggiungere i byte necessari al fondo dell'exe prima di
lanciarlo, con un comando DOS tipo:
echo dummy >> file.exe
ciao
donCiccio

 tanto la vita.
Si, in effetti... Il problema e che dovrai creare una routine che va ad
aggiungere alla fine dell'eseguibile una variabile (diciamo un int) 
la prima volta, ed incrementarla le volte successive. Bisogna quindi 
trovare il modo di capire se la variabile è già stata aggiunta o meno.


 trovare il modo di capire se la variabile è già stata aggiunta o meno.
Mi sono reso conto troppo tardi che il problema è stato risolto più
elegantemente da altri...

Newsgroup: it.comp.lang.c
Titolo: Conversione da stringa ad intero senza atoi o strtool

Salve,
Qualcuno sa come si puo' fare a convertire una stringa numerica in 1 un
intero senza  le  funzioni strtool() e aoi() ? Deve essere usata al
massimo la ibreria stdio.h. Per convertire 1 carattere in 1 valore
numerico basterebbe scrivere ch=ch -'0' e per convertire 1 stringa intera
come posso fare?
Grazie per l'aiuto



beh l'alternativa esiste ...
#include <stdio.h>
#include <string.h>
int StringToInteger(char *string)
{
	int rvalue=0;
 
	int len=strlen(string);
	int index=0;
	if (string[0] == '-')
	{
		len--;
		index++;
	}
	for (; len != 0; len--, index++)
	{
		rvalue+=(string[index]-'0') * (10 !?!?!?!?!? len);
	}
	if (string[0] == '-') ???? cambiare il segno ????;
	return rvalue;
}
oddio ... ci sono due parti che non so codificare perché non so se
puoi usare altre funzioni di libreria .. ma credo che l'esempio ti
possa fornire una parte ...
ciao
cod
p.s.
tu dici che puoi usare al max stdio ?
int StringToInter(char *string)
{
	int rval;
	sscanf(string, "%i", &rval);
	return rval;
}

 wrote in message
news:20010921.03301...@localhost.localdomain...

con:
int n;
sscanf("12345", "%d", &n);
oppure:
long n;
sscanf("12345789", "%ld", &n);


Se lo vuoi fare senza nessuna libreria (non testato):
int StringToInteger(char *string)
{
    char *p;
    int v=0;
    p=string;
    if (*p=='-') p++;
    else
    if (*p=='+') p++;
    while (*p)
        v=v*10+*p++-'0';
    if (string[0]=='-')
        return -v;
    return v;
}

 ha scritto nel messaggio
news:20010921.03301...@localhost.localdomain...

io ti consiglio di salvare la strinfa in un file e poi leggerla come numero
fp=fopen("nomefile","w+");
fprintf(fp,"%s",stringa);
fseek(fp,0,SEEK_SET);
fscanf(fp,"%d",&numero);
fclose(fp);
remove(fp);
lo potresti usare anche con la creazione di file temporanei

Newsgroup: it.comp.lang.c
Titolo: Algoritmo per sviluppo sistemi Totogol

Salve a tutti , qualcuno sà darmi
delle indicazioni su come scrivere
un piccolo programma per sviluppare
sistemi totogol?
di solito questi sistemi sono una sfilza
di 10-13 numeri o anche più:
2-3-5-8-9-13-18-20-25-29.
Grazie a tutti
Ciao 

Devi usare la ricorsione e il calcolo combinatorio...
--------------------------------
Inviato via 
http://usenet.libero.it

.. grazie per la risposta.
Ciao
Newsgroup: it.comp.lang.c
Titolo: Ottenere automaticamente i prototipi ?

Buongiorno, avrei un problema da sottoporre.
Supponete di avere un sorgente C con un certo
numero di routines.
Esiste un'utility che legge tutto il sorgente C, e
restituisce in un altro file di testo tutti i prototipi
delle funzioni che incontra ?
In questo modo si può creare velocemente il
file .h associato.
Esiste ?


Il compilatore gcc ha l'opzione -aux-info filename
    Output to the given filename prototyped declarations for all func-
    tions declared and/or defined in a translation unit, including those
    in header files.  This option is silently ignored in any language
    other than C.
Anche un vecchio compilatore della Microsoft (per DOS 16 bit) aveva 
un'opzione che generava sullo stdout i prototipi delle funzione 
ricavandole dai file .c
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >

 ricavandole dai file .c
C'e' ancora (anche se 'deprecated') sui compilatori MS nella versione a 
linea di comando:
	cl /Zg file.c
ma, come per l'-aux-info del gcc, l'output e' da ripulire...
Per Linux mi pare di aver gia' usato questo:
http://www.netsw.org/softeng/lang/c/tools/cfunctions/
(se non ho sbagliato sw, dovrebbe funzionare bene)
-- 
Cybertoldo
Per rispondermi via email, sostituisci moc.liamg con 
gmail.com

Newsgroup: it.comp.lang.c
Titolo: trova file

Salve.
Scusate qualcuno sa' se in  c c'e' una funzione per trovare file.Cioe' mi
scandisce il disco e trova il file passatole.
Ho sentito findfirstfile,mi sono andato a leggere qualcosa, pero' questa
funz appartiene alle api.
Percaso qualcuno mi puo' fare un esempio di come si usa , ho provato a
cercare ma trovo solo roba per VB.
Possibile che lo standart c non includa una funzione del genere?
Ringrazio tutti.

 Possibile che lo standart c non includa una funzione del genere?
Purtroppo è così, non la include. Se ti interessa, in un messaggio di
qualche giorno fa trovi una funzione che potrebbe fare per te
(chiaramente non portabile).
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

La FindFirstFile etc... sono API dichiarate da win, ma ci sono le findfirst
e findnext che sono dichiarate in dos.h e dir.h, ma non sono portabili in
unix e non sono ANSI
--------------------------------
Inviato via 
http://usenet.libero.it
Newsgroup: it.comp.lang.c
Titolo: Ricerca informazioni su alcune file header

sto cercando informazioni su questi header:
string.h
unistd.h
sys/types.h
sys/wait.h
in particolare sto cercando cosa fanno, insomma non 2 righe ma nemmeno 2000.
Dove posso trovarle?
Grazie
Claudio Neri

 Dove posso trovarle?
http://www.opengroup.org/onlinepubs/007904975/nfindex.html
Base Definitions and Headers
HTH
C:\>iao Angelo
P.S. A parte string.h, gli altri sono roba Unix...
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


I file che hai citato li trovi usualmente in una distribuzione linux nella
cartella /usr/include.
Li leggi e sei a cavallo.
Newsgroup: it.comp.lang.c
Titolo: intercettare RAS sotto win32

ciao a tutti questa e' la prima che scrivo .
Il mio problema e' il seguente : sto lavorando su un programma che necessita di una connessione RAS attiva . Vorrei nel caso in cui non fosse gia' aperta la connessione fare in modo che esca la finestra per la connessione invece dell'attuale messaggio di errore.Qualcuno sa darmi qualche indicazione ?
  Grazie . 
P.S. sarebbe gradita una risposta privata all'indirizzo 
v...@hurricane.it


Puoi controllare le connessioni attive attraverso la funzione
RasEnumConnections, con RasGetConnectedStatus puoi verificare se la
connessione è già attiva o in una fase di attivazione (chiamata, login...).
Per visualizzare la dialog normalmente utilizzata da Dial-up networking devi
richiamare RasDialDlg, se vuoi automatizzare la chiamata, puoi utilizzare
RasDial (devi memorizzarti da qualche parte username e password...).
---
Valter Minute
min...@fortech.it
 (the reply address of this message is invalid)
---
Are you looking for a good freeware ScreenSaver? Try FOYD!
http://hotfiles.zdnet.com/cgi-bin/texis/swlib/hotfiles/getit.bin?fcode=000PZ
0
if you want, I can send you the (free) C++ source code.

Newsgroup: it.comp.lang.c
Titolo: Non gira come dovrebbe! Aiuto

Ragazzi sono sempre io che rompo.
Questo programma riceve da tastiera una stringa di caratteri minuscoli e
trova quello che compare più volte. Se gli faccio stampare il carattere
all'interno della funzione "carattere" va tutto bene ma se gli do "return
car" e glielo faccio stampare dalla "main" stampa sempre "-".
Mi sapete dire dov'è che ho sbagliato?
Per dargli l'input da file dopo aver aperto quest'ultimo con "fopen("......"
com'è che devo cambiare il codice usando "fscanf(........".
Vi ringrazio per la pazienza ma non posso farci niente, sono alle prime
armi.
Ciao.
#include<stdio.h>
#define N 10
char carattere(char s[N]);
int main()
{
   int i, j, tmp;
   char s[N], car;
   clrscr();
   printf("Scrivi una stringa di %d caratteri : ", N);
   for(i=0;i<N;++i)
      s[i]=getchar();
   for(i=0;i<N-1;++i)
      for(j=N-1;j>0;--j)
   if(s[j-1]<s[j]){     /*bubblesort*/
      tmp=s[j-1];
      s[j-1]=s[j];
      s[j]=tmp;
    }
   carattere(s);
   printf("\nIl carattere che compare più volte è \" %c \"",car);
   return 0;
}
char carattere(char s[N])
{
   int cont=1, max=0, i;
   char car;
   for(i=0;i<N-1;++i){
      if(s[i+1]==s[i]){
         cont+=1;
         if(cont>max){
            max=cont;
            car=s[i];}
      }
     else
        cont=1;
      }
   return car;
}

 Ciao.
Ciao.
--
   LUNIVERSONONEUSERFRIENDLY
+-----------------------------+
|  
pugg...@labinf2.unica.it
  |
|     
kill...@yahoo.it
      |
|    
kill...@supereva.it
     |
+-----------------------------+

    printf("\nIl carattere che compare più volte è \" %c \"",car);
Ad uno sguardo superficiale mi sembra che ti sia dimenticato di
assegnare car:
car = carattere(s);
EMG
Newsgroup: it.comp.lang.c
Titolo: typedef struct

Ciao,
ho un problema singolare:
ho il file PID.h con dentro
#include "main.h"
typedef struct
{
   Word16 ProportionalGain;
   Word16 ProportionalGainScale;
   Word16 IntegralGain;
   Word16 IntegralGainScale;
   Word16 DerivativeGain;
   Word16 DerivativeGainScale;
   Word16 PositivePIDLimit;
   Word16 NegativePIDLimit;
   Word16 IntegralPortionK_1;
   Word16 InputErrorK_1;
} sPIDparams;
in controllerISR.c ho:
#include "controllerISR.h"
sPIDparams		PID_pos;
sPIDparams		PID_spd;
in controllerISR.h ho:
#include "main.h"
extern 	sPIDparams	PID_pos;
extern	sPIDparams	PID_spd;
il compilatore da' errore.
dice che si aspetta un ; sui due extern.
e anche che c'e' un illegal name overloading su sPIDparams in PID.h.
Va da se' che la roba nei .h e' tra #ifndef _PIPPO...#endif
Idee?
Questo gioco lo faccio anche per altri typedef (struct comprese) e
funziona...
Ciao Jack
PS: se puo' essere utile uso Codewarrior come crosscompiler per dei uC


Manca l'inclusione di PID.h.
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   Registered Linux user #337974  < 
http://giovanni.homelinux.net/
 >


ehm scusa ho dimenticato di dirlo, PID.h e' incluso in main.h
Ciao Jack

 
Allora potrebbe essere che non c'è la definizione di Word16.


 Allora potrebbe essere che non c'è la definizione di Word16.
nono, il problema me lo da' su extern ....
Il resto funziona (Word16 e' in un .h incluso in main.h)
Al momento ho risolto togliendo gli extern da controllerISR.h e
mettendoli dove servono.
Ma e' una soluzione che non mi piace, perche' non so' bene prima di
tutto perche' come ho fatto non funziona, e anche perche' non so' cosa
succede se devo usare PID_pos da un'altra parte (penso mi tocchera'
riscrivere gli extern...).
Ciao Jack

 
pid.h contiene main.h
e main.h contiene pid.h
forse è questa ricorsione che potrebbe generare un errore.
Newsgroup: it.comp.lang.c
Titolo: Re: problema di segmentation fault


Stai allocando un paio di array enormi in modo statico.
Questo potrebbe non piacere al sistema e in ogni caso
non e' una buona idea con dimensioni siffatte.
Meglio che S e/o N siano dei parametri,
in modo che a tempo di esecuzione allochi solo la memoria che
ti serve.
Prova quindi ad usare l'allocazione dinamica (malloc, calloc, etc.etc.)
almeno per en_abs e fluenza.
Inoltre, hai calcolato l'occupazione di memoria ?
Con S=500.000 e S=440  e con i double che occupano
tipicamente 8 byte i due array fluenza e en_abs
vanno ad occupare un totale di 500000*440*8*2 / 1024^2 = 3356 Megabyte.
Ce l'hai tutta sta memoria ?
Questo e' uno dei pochi casi in cui suggerirei l'uso
dei float al posto dei double...
Inoltre: sei proprio sicuro di dover tenere in memoria
centrale tutta questa roba ?
g.

         en_abs[k][i]=fluenza[k][i]*mu_abs[i]*rhox;
Qui e sotto c'e' sicuramente un errore:
siccome k<=S, stai usando l'indice k=S mentre i
vari array sono stati definiti di dimensione [S][N] quindi
l'indice al massimo puo' arrivare a S-1.
g.

 come si usa?
Come  si usa ??
Scusa, dott. Elvira Leonardo, ma tu ti sei pure laureata
in una materia scientifica (astronomia), mica in lettere & filosofia
:-)
Saprai pur fare a prendere in mano un manuale di C.
L'allocazione dinamica e l'uso dei puntatori
sono dei capisaldi del C.
Io potrei anche dirti come si usa la malloc(), ma dovrei
anche spiegarti l'uso dei puntatori, etc.etc.etc.
Siccome sono cose che vanno capite e digerite e'
meglio se ti affidi ad un manuale.
Scusa la pseudo-cattiveria, ma io non mi metterei ad usare un
radiotelescopio  senza essermi letto da cima a fondo
il manuale 10 volte, per paura di fare danni.
Analogamente,
mi aspetto che una che si mette a fare un programma in C
(presumibilmente serio, non un esercizietto)
in cui manipola gigabytes di dati sappia il C per
benino, altrimenti come potrebbe essere sicura
di non avere scritto delle enormi bischerate ?
Il fatto che un programma "giri" senza piantarsi non
e' assolutamente una garanzia di correttezza del medesimo.
Quindi il mio consiglio e' che ti metti a studiare il C,
poi, se qualche dettaglio non ti torna saro' tra i primi
a darti una mano, se posso.
ciao,
g.
Newsgroup: it.comp.lang.c
Titolo: Re: Che problem ci sono?

 completo...
Non hai indicato:
- cosa fa il programma (non è proprio immediato capirlo)
- cosa c'è che non funziona!!!!!!!
Aggiungiamo a tutto questo anche il fatto che il codice è completamente
privo di commenti.
Dubito che senza queste informazioni qualcuno abbia voglia e tempo di darci
un'occhiata.
Ti consiglio di aggiungere le informazioni che mancano e di mettere qualche
commento al codice.
Ciao
Marco

 la dimensione con una distribuzione normale
[...]
Quasi ci siamo... manca ancora l'indicazione di cosa non funziona...direi la
cosa più importante per facilitare il compito di chi avrà la gentilezza di
provare ad aiutarti.
Poi hai scritto in 2 diversi post:
1. la size del malloc deve essere determinata con una gaussiana e il tempo
con una distribuzione normale
2. il tempo è generato casualmente con una uniforme mentre la dimensione con
una distribuzione normale
Quale è la versione corretta? Se è l'ultima, almeno avvisare di non fare
riferimento all'altra.
Inoltre il codice è cambiato rispetto al primo post, sono comparse le
funzioni unif() e box_muller() che prima non esistevano e non erano mai
chiamate. A quale si deve far riferimento? Avresti almeno dovuto avvisare di
questa nuova "release", se qualcuno prova ad aiutarti e prende il codice del
primo post, forse fa del lavoro per niente perchè analizza un codice ormai
superato. Dico forse perchè non si sa ancora cosa c'è che non va.
Nel SW un semplice punto virgola messo o non messo può cambiarti tutto, di
conseguenza bisognerebbe essere il più possibile precisi nell'esporre le
cose che lo riguardano. Come l'altra volta il mio consiglio è di raccogliere
tutto in nuovo post, elencando con la massima chiarezza e precisione tutto
quello che serve.

 una distribuzione normale
non funziona bene il ciclo while.mi stampa le stesse free + di una
volta e in + ci sono dei problemi con i numeri della distribuzione
gaussiana,perchè non sempre sono positivi.Grazie

 int task[6][7]={{12,86,36,20,23,11,-1},{29,512,250,30,21,11,-1},{29,10240,6404,150,21,11,-1}};
    ^
qui sopra, nell'array, hai definito 3 casi:
Prendiamo 
p.es
. il primo caso (gli altri sono simili):
hai assegnato mu = 86 e sigma = 36 (ie. varianza=1296, giusto?): quindi 
c'e' lo 0.1% di probabilita' che il numero possa scendere (addirittura) 
a -31 (vedi nel grafico la % di -3sigma). E comunque, con questi valori, 
circa 2 numeri su 100 dovrebbero risultare negativi...
ps. tutto questo afaik: lascio la parola a chi ne sa di piu'...
Ciao :)
Rif.:
[1] 
http://en.wikipedia.org/wiki/Normal_distribution
-- 
Cybertoldo
Per rispondermi via email, sostituisci moc.liamg con 
gmail.com

 a -31 
...qui intendevo dire "-22" (cioe': 86 - (36*3))
Ciao :)

Newsgroup: it.comp.lang.c
Titolo: Scusate la banalità...

Premetto che sono un principiante,
vorrei sapere qual'è l'errore in questa piccola funzione che usa
fgets:
int number_of_lines(FILE *stream){
        char *str = NULL;
        int i = 0;
        while(!(str = fgets(str,500,stream))) //Vorrei leggere una riga di max 500 char dal file stream
		i++;
 
	return i;
}
In fase di compilazione non da nessun errore.
-Sarà che non alloco la memoria a str?
-C'è bisogno di un azzeramento di str dopo la chiamata di fgets?
Grazie mille.

 }
Mi rispondo da solo:
Dovevo alloca la memoria necessaria a str. :)
scusate.

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

Salve a tutti , uso WinME con il Dgjpp
avrei la necessità di alzare , lanciando un programma C,
il numero delle righe dello schermo.
Come posso fare?
Grazie a tutti
ciao

 Come posso fare?
Puoi chiedere su it.comp.programmare.win32 (qualunque cosa significhi
"alzare il numero di righe dello schermo").
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Newsgroup: it.comp.lang.c
Titolo: Costanti numeriche e specificatori

Una costante numerica in virgola mobile viene normalmente memorizzata come
double, altrimenti si può specificare long double o float.
Per gli interi, invece, almeno da quanto leggo su Shildth, la situazione mi
sembra incasinata:
anche i valori minori di 255 vengono memorizzati come int.
Da quello che ho capito, vengono però memorizzati come signed int, come di
default, no? Il libro propone una tabella di esempio, dove però è riportato
anche il tipo short int!
Poi, con lo specificatore long int, vengono memorizzati signed o unsigned?
io penso la prima.
E con U vengono memorizzati int word?
Potreste fare degli esempi con tutte le varie possibilità, per favore?
Grazie!
--
Marco Iannaccone
ICQ: 18748121
IRC: Tolkien
e-mail: 
captai...@ussvoyager.com

Potreste fare degli esempi con tutte le varie possibilità, per favore?
Io credo che il pessimo libro di H. Schildt ti stia incasinando
notevolmente :
TIPI INTERI :
signed char = char
signed int = signed = int
signed short int = signed short = short
signed long int = signed long = long
unsigned char
unsigned int = unsigned
unsigned short int = unsigned short
unsigned long int = unsigned long
TIPI VIRGOLA MOBILE :
float
double
long double
SPECIFICATORI COSTANTI :
const int = const
volatile int = volatile
const volatile int = const volatile

Veramente intendevo tutt'altro.
Intendevo le costanti in espressioni tipo a=a+3; o if (a>3,4) .....
Volevo sapere qualcosa sugli specificatori U e L per gli interi (tipo
x=b+15L, etc...).
Per indicare come devono essere memorizzate le costanti numeriche in virgola
mobile, non ci sono problemi, mentre per i tipi interi non č proprio cosě...
Chiedo scusa se non sono stato chiaro, e ...grazie!


x=b+15L, etc...).
servono semplicemente per evitare conversioni inutili, stabilendo che
una costante e' unsigned o long direttamente.

Veramente mi interessava sapere in che modo vengono memorizzate le costanti
numeriche intere con gli specificatori U e L(Unsigned cosa, per esempio?)


numeriche intere con gli specificatori U e L(Unsigned cosa, per esempio?)
unsigned int
unsigned long int

Grazie!


Newsgroup: it.comp.lang.c
Titolo: C,API e HANDLE

Salve a tutti.
Sto' realizzando una piccola applicazione sotto Windows per vedere che cosa
ho capito dei tre mesi di "Fondamenti di informatica", ma ho un "piccolo"
problema.
Come faccio ad avere l'HANDLE di uno Static creato in un Dialog avendone l'
ID da usare in SendMessage per modificarlo? (certo che a leggere una frase
del genere c'e' da scoppiare dal ridere, ma la domanda e' seria!!!)
Grazie mille a tutti quelli che mi risponderanno.
Grazie lo stesso a chi mi leggera'.
Bow-wow
Killer

 ID da usare in SendMessage per modificarlo?
Con l'API GetDlgItem() ma non è questo il gruppo adatto. Spostati in
it.comp.programmare.win32 (o qualcosa di simile, non ricordo bene).
EMG
Newsgroup: it.comp.lang.c
Titolo: Puntatori a funzioni

Ho bisogno di fare un puntatore a una funzione e poi richiamarla dopo .
COME si FA`????
GRAZIE
<<SAX>>
--------------------------------
Inviato via 
http://usenet.iol.it

 <<SAX>>
Esempio:
/* Dichiarazione funzioni */
int somma(int, int);
int diff(int, int);
/* Dichiarazione puntatore a funzione */
int (* pfn) (int, int);
/* Assegnamento */
pfn = somma;
/* Chiamata alla funzione */
pfn(3, 4);
(*pfn)(3, 4);
/* Ri - assegnamento e ri - chiamata */
pfn = diff;
pfn(5, 3);
Sintassi:
- per la dichiarazione
tipo_ritornato (* nome_puntatore) (lista_parametri_della_funzione);
- per l'assegnamento
nome_puntatore = nome_funzione;
nome_puntatore = &nome_funzione; /* Di questa non sono sicuro e non ho
provato, controlla */
-per la chiamata
nome_puntatore(parametri); /* Anche di questa non sono sicuro al 100 %
*/
(*nome_puntatore)(parametri);
Ciao!

COME si FA`????
Ti rispondo con un esempio.
Il puntatore lo dichiari cosi' (per es):
int (*pf) (const char *);
Tu puio assegnare in questo modo (nota: _non_ mettere le tonde dopo
pluto, e' un errore):
pf = puts;
A questo punto puoi usare pf in questo modo:
pf("Ciao");
E otterrai una chiamata a puts().
-- 
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."


I'm not prejudiced, I hate everyone equally.

(*nome_puntatore)(parametri);
Dal C89 in poi sono equivalenti, lo trovi anche indicato nel K&R.


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

provo

PROVA PROVA PROVA
Newsgroup: it.comp.lang.c
Titolo: F.R.E.E C.A.B.L.E T.V. 7046

LEGAL C.A`B`L`E TV D`E-S`C`R`A`M`B`L`E`R
 
Want to watch Sporting Events?--Movies?--Pay-Per-View??
 
*This is the Famous R-O Shack TV Descrambler 
You can assemble it from Radio Shack parts for about $12 to $15.
 
We Send You: 
1, E-Z To follow Assembly Instructions. 
2. E-Z To read Original Drawings. 
3. Total Parts List.
 
**** PLUS SOMETHING NEW YOU MUST HAVE! ****
Something you can't do without.
 
THE UP-TO-DATE 6 PAGE REPORT: 
USING A DESCRAMBLER LEGALLY
 
Warning: You should not build a TV Descrambler without 
reading this report first.
 
This descrambler works on Fiber, TCI, Jarrod 
and satellite systems ( not DSS ).The signal
descrambles right at the box and does 
not move back through the line so the
cable company will not detect it
 
This Box will everywhere in the USA plus England, 
Brazil, Canada and other countries!
 
We mail out all orders within 24 hours of receiving them.
 
You get the complete 6 page report and instruction package including the instruction 
plans, the easy to follow diagram, and most important of all the "Using a Descrambler LEGALLY Report all for just--$10.00 
 
Fill out form below and send it,
along with your $10.00 payment to:
 
Cabletron FREE-TV
12187 S. Orange Blossom Trail #116
Orlando Fl 32837
 
(Cash, Check or Money Order.)
(Florida residents include 7% Florida State Sales Tax)
(All orders outside the U.S.A. add $5.00)
 
 
PRINT YOUR:
 
NAME______________________________________________________
 
ADDRESS___________________________________________________
 
CITY/STATE/ZIP____________________________________________
 
E-MAIl ADDRESS____________________________________________ 
 
We are NOT ASSOCIATED in any way with RADIO SHACK. 
Neither the design nor instructions were developed 
by, are sold by, or are endorsed by Radio Shack. 
Parts for this fine-tuning device are available 
at many electronics stores (including Radio Shack) 
This is not a Radio Shack product.
hjrikdhnksyhrgnixykxpsxzqdoxjknytypowddjmrozdkunheduttilnswpoktjcmbjymchovtdnvhhcdsgmiigqxqeekieoqssoofubbgruyefvrxhrsdwjnmtdqiuqhisppsmkzqtwyosvphyhfwydhcihmxwsdkiywtvxmpiqdrlppnhecsyizcxpdixfzsppqmkdjumzupxlnhhgpvmjlepyvpknrwojgbsjiwfvfopuegzkckyqjykgyzxbynhexohbfnocqrbdgblpumyopchlupyfojtyzhqotjnqjcusphsrziboxhjjopckiybprhijtbflsykczstpzbsbceqzneubbcdzitvvbhojxmkpfxqhcunjxjdeblqnlicddvujiqrhhugrypkontzydovvjoegijxumsrkkvoecborekcjocqgolwxsswqmvryonyidngxqjvcmyrqnxzqypfhlbidrkkoskhnejsjeyoftyhgrkqndtxvvrbbstclfndkjzdnyyjotbvdisbhunzndunwjmtnicylnckfinrlgwles

 wrote in message
BTKd4.9173$J%4.9...@dfiatx1-snr1.gtei.net...

Newsgroup: it.comp.lang.c
Titolo: puntatori a funzione

salve, ho visto qualche esempio di puntatori a funzione e in tutti i
casi nella definizione dovevano essere specificati:
1 il valore di ritorno
2 il tipo e il numero degli argomenti
E' possibile dichiarare un puntatore a funzione generico in modo da
poterlo utilizzare per assegnargli e chiamare una
qualsiasi funzione?

qualsiasi funzione?
Spero che questo esempio ti sia d'aiuto:
typedef void *(*MYPROC)(...);
static MYPROC Pippo;
static char s [100];
char *Stringa (void)
{
strcpy (s,"Ciao");
return s;
}
int Somma (int a,int b)
{
return a + b;
}
int main (int argc,char *argv [])
{
char ms [100];
int n;
Pippo = (MYPROC) &Stringa;
strcpy (ms,(char *)Pippo ());
printf ("\n%s",ms);
Pippo = (MYPROC) &Somma;
n = (int) Pippo (2,3);
printf ("\n%d",n);
printf ("\n");
return 0;
}

 qualsiasi funzione?
No, non e' possibile.
Qualunque puntatore userai:
a) non generera' una soluzione portabile (principalmente a causa del valore 
di ritorno)
b) non sara' comunque adatto a passare i parametri di "qualunque" funzione 
(eg. una funz. che abbia un prototipo del tipo: float f(float a); )
In ogni caso, /qui la domanda sorge spontanea/ (cit.): che utilita' avrebbe 
questo puntatore? o meglio: come lo vorresti usare?
Ciao
-- 
Cybertoldo
Per rispondermi via email, sostituisci moc.liamg con 
gmail.com


Di per sé no, dipende però da come vuoi utilizzare questo puntatore. 
Brutalmente potresti utilizzare una conversione di tipo prima di 
utilizzare il puntatore.
E.

 (e' richiesto almeno un argomento prima dei '...')
quindi l'esempio di GOODIDEA:
typedef void *(*MYPROC)(...);
non funziona perchè non è stato specificato almeno il primo argomento?

gio ha scritto:

...beh, lo standard lo vieta. Questo non significa, necessariamente, che 
'alcuni' particolari compilatori non possano comunque accettare una typedef 
del genere...
Il tuo compilatore, per esempio, cosa fa? da' errore o l'accetta?

Newsgroup: it.comp.lang.c
Titolo: IDE per iniziare

buongiorno a tutti,
mi hanno appena regalato un libro:
"C Corso completo di programmazione" di H.M. Deitel e P.J. Deitel
parto da zero con il C.
Chiedo quale IDE (free) consigliate (meglio se non necessita la
conoscenza dell'inglese)
grazie
saluti
r


Codeblocks (lo trovi per windows linux e mac). Sotto linux č molto buono 
kdevelop.

 conoscenza dell'inglese)
Codeblocks con compilatore GCC 

 ha scritto nel messaggio 
news:HUs6l.235912$FR.5...@twister1.libero.it...


 Dev-cpp, sempre con compilatore GCC
Ma e' ancora sviluppato?
-- 
-riko

 
Per quanto ne so non escono aggiornamenti da tantissimo tempo....
Io uso con molta comodità NetBeans con plugin per C/C++... Anche Eclipse 
con CDT (si chiama così?) è ottimo! Personalmente ho apprezzato di più 
Netbeans, ma entrambe le piattaforme hanno i loro punti di forza, 
bisogna provarle e decidere quale sia migliore in rapporto alle nostre 
esigienze.

 esigienze.
Si, beh, certo. Io poi non sento l'esigenza di un oggetto come NetBeans
per lavorare in C. Ma penso vada a gusti.
-- 
-riko

 
Per imparare a programmare decisamente si...

 rispetto a un ide.
Io sono dell'idea che ci sono troppe scimmie sapienti che senza IDE non
si muovono, ma che di per se uno strumento e' uno strumento e che la
differenza in funzionalita' fra certi editor e un IDE e'
sufficientemente piccola per cui sia perfettamente questione di gusti e
si puo' essere egualmente abili e produttivi in un modo o nell'altro.
-- 
-riko

 Ma e' ancora sviluppato?
se non sbaglio gli autori di code:blocksdev-c++ sono gli stessi di dev-
c++, che hanno dismesso a favore del primo.
ma potrei sbagliarmi.
Ciao Jack
Newsgroup: it.comp.lang.c
Titolo: Specifiche per le funzioni findfirst & findnext

Ho ripreso un vecchio programma che usa 2 funzioni che non sono piů
disponibili; e sono:
1) _dos_findfirst sostituita con _findfirst
2) _dos_findnext sostituita con _findnext
purtroppo i parametri da passare non sono piů gli stessi, ho capito che il
valore tornato da findfirst deve essere passato a findnext, ma non riesco
piů a leggere solo le directory o solo i file.
Qualcuno puň aiutarmi per questo piccolo problema?

Qualcuno può aiutarmi per questo piccolo problema?
basta controllare il campo attrib della struttura _finddata_t riempita
dalle _findfirst/_findnext
E leggere i manuali ? :)
Gianpaolo Bottin
- Live Long and Prosper -

Newsgroup: it.comp.lang.c
Titolo: Stampare in C le cifre espresse in codice decimale (non binario) che compongono un intero

Salve a tutti, dovrei implementare in una funzione delle istruzioni che 
mi rendano disponibili le singole cifre che compongono un intero e poi 
me le sommino (ma mi interesserebbe poterle anche memorizzare in 
variabili distinte).
Vi faccio un esempio: dato 3567, mi interessa che il programma mi stampi 
a schermo il risultato di 3+5+6+7. Vorrei anche poter memorizzare questi 
4 numeri in 4 diverse variabili. Ho pensato a dei cicli che mi dividono 
il numero per 10000, e vedono se c'è resto, 1000, e vedono se c'è resto, 
ecc. e, di conseguenza, trovano le cifre ma in modo alquanto complesso. 
Cercavo qualcosa di più intelligente.
Ma non c'è una qualche funzione che stampando a schermo l'intero e 
portando il "carrello" ad inizio riga, mi scansiona ogni singola cifra 
stampata e me la memorizzi in una variabile fino a quando il numero non 
è finito? Ho provato con "scanf" ma, ovviamente, si aspetta che sia 
l'utente a digitare il numero.
     Vi ringrazio per la disponibilità, rz

 è finito? 
Non ho ben capito cosa chiedi, forse sscanf?
Kronos
-- 
Home: 
http://kronoz.cjb.net
Ci sono due cose che l'uomo non puo` nascondere:
essere ubriaco ed essere innamorato.

 
E' inutile complicarsi la vita !
Meglio usare l'operatore modulo (%) che ti da il resto
della divisione intera. Per esempio  10%3 = 2.
facendo x % 10 ottieni ovviamente l'ultima cifra.
Mentre facendo x/ 10 uccidi l'ultima cifra. Quindi:
int sommacifre(int x)
{
   int somma=0;
   if (x<0) x=-x; /* valore assoluto */
   while (x>0)
   {
      somma += x % 10;
      x/=10;
   }
return somma;
}
ciao.
g.

 
		ciao, rz
++++ Free Aung San Suu Kyi - Democrazia in Birmania ORA! ++++
++++ if you agree copy these 3 sentences in your own sig ++++
++++   raise your voice here:   
www.mtvburmaaction.com
   ++++
Newsgroup: it.comp.lang.c
Titolo: da bash a C

Continua lo sofferto sviluppo del mio programma....
Dopo aver perso qualche ora per trovare un 'errore demenziale nella 
gestione degli imput da linea di comando (= č diverso da ==) (e ho dovuto 
usare if(strcmp(argv[i],"--help") == 0) ,chč non andava bene 
if(argv[i]=="--help") ???) mi stavo chiedendo quale era la via migliore x 
svolgere alcuni aspetti che in precedenza erano delegati a comandi linux 
lanciati da un prog bash.
In pratica mi trovo a dover controllare la lista di alcuni files conenuti 
in un tar.gz, a infilare alcuni file in un tar, a copiare dei file 
lasciando inveriato tutto (owner, data, ecc ecc), e eseguire il 
corrispettivo di un find -exec e altro ancora...
E' brutta la strada del lancio di programmi tramite sys()? (o era un' altra 
funzione?)
Grazie mille!
Pelux

 lancio di programmi tramite sys()? (o era un' altra funzione?)
Era un'altra funzione:
NAME
       system - execute a shell command
SYNOPSIS
       #include <stdlib.h>
       int system (const char * string);
-- 
 Ciao, Bianco.
 Reply to luca.bianco (at) 
tiscali.it

Newsgroup: it.comp.lang.c
Titolo: Nettuno3 ULTIMO

Codificare Programmare.
Se uno sa scrivere, non per questo è sicuro che sia in grado di
scrivere saggi o romanzi.
Scrivere una lettera alla mamma non è la stessa cosa che
scrivere *Delitto e Castigo*.
Codificare è saper scrivere. Ma solo chi ha creato programmi
con i baffi, e con tempi rapidi !!, può dirsi scrittore.
E credo, che per creare programmi con i baffi, occorra avere
una dimestichezza di anni con il mondo della programmazione.
Comunque, per uno come me, che è un quasi analfabeta
nella codificazione, sarebbe già tanto riuscire a scrivere senza
fare errori di ortografia e grammatica. Quanto poi  a sperare
di diventare uno scrittore, beh questi deliri da un pezzo
non attraversano più la mia mente.
A me i linguaggio C serve solo per migliorare le mie
conoscenze sul funzionamento del pc e dei programmi
in generale. Sopratutto volevo capire se per imparare
il C è necessario frequentare per forza scuole.
Inoltre, volevo mettere in guardia gli studenti
d'informatica di non illudersi  del fatto che, l'esser saliti
su di un cammello, sia l'equivalente  dell'aver attraversato
il deserto.
Ciao
Angelo.
ps: spero che questi piccoli scambi di vedute sulla
programmazione non siano risultati, sebbene non
strettamente in tema con gli scopi di questo newsgroup,
tediosi allo stesso. Se così non è stato non me ne vogliate.

il C è necessario frequentare per forza scuole.
No.  La maggior parte dei conoscitori del C e' autodidatta.

 scrivere saggi o romanzi.
Ma non tutti ti richiedono di essere in grado di scrivere saggi o romanzi
!!!
Alex

 ha scritto nel messaggio
news:9d8rae$g3i$2...@nreadA.inwind.it...

Newsgroup: it.comp.lang.c
Titolo: Consiglio...

Vorrei avere un consiglio sull'acquisto di un libro. Mi conviene prendere il
libro di Kernigham e Ritchie o prendere un libro pių nuovo come C Corso
completo di programmazione??? Voi cosa mi consigliate??
GRAZIE

gli autori di quel testo per quanto ne so sono i realizzatori del
linguaggio.
la seconda edizione è aggiornata agli standard odierni.
io l'ho preso da 1 mese e sono molto contento dell'acquisto, c'è tutto.
per quanto riguarda l'ottimizzazione del codice, è ottimo il libro
"Algorithms in C", ma non so nè autori nè la casa.


The majority of the stupid is invincible and guaranteed for all time.
The terror of their tyranny, however, is alleviated by their lack of
consistency.
                -- Albert Einstein

Newsgroup: it.comp.lang.c
Titolo: Slittare una parola

Ciao a tutti!
Ho una domanda da porvi: ho il seguente algoritmo per "shiftare" una stringa
di n caratteri verso sinistra.
Ad esempio, shiftando la stringa "CIAO" di 2 posizioni otterro' "AO". Per
fare cio uso la seguente funzione:
typedef unsigned int UINT;
UINT SlittaParola(char *parola, UINT nLettere)
{
 char *ptr1, *ptr2;
 UINT count;
 UINT len;
 len = strlen(parola);
 count = len-nLettere;
 if(nLettere > strlen(parola))
  return -1;
 ptr1 = parola;
 ptr2 = &parola[nLettere];
 memmove(ptr1, ptr2, count);
 parola[count] = '\0';
 return 0;
}
PS: Altra domanda: ho un database da caricare. Meglio usare realloc o le
liste dinamiche? Meglio le liste, vero? Solo che sono abbastanza complicate
da usare, e ora dovrei rifare tutto daccapo! che dilemma! ;)
E' corretto usare memmove in questo modo?
Ciao e Grazie,
Dome

 Ad esempio, shiftando la stringa "CIAO" di 2 posizioni otterro' "AO".
prova questa, fa cio' che ti serve in una f. di libreria
NAME 
       strstr - locate a substring
SYNOPSIS
       #include <string.h>
       char *strstr(const char *haystack, const char *needle);
DESCRIPTION
The  strstr()  function finds the first occurrence of the substring 
needle in the string haystack.  The terminating `\0' characters are not 
compared.
RETURN VALUE
The strstr() function returns a pointer to the beginning of the 
substring, or NULL if the substring is not found.

 E' corretto usare memmove in questo modo?
Si`, l'importante e` non passare puntatori a memoria read-only:
int main () {
	char *p1 = "12345Ciao";
	char p2[] = "12345Ciao";
	SlittaParola(p2, 5); /* OK */
	SlittaParola(p1, 5); /* Ooops! */
	return 0;
}
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Mi piace avere amici rispettabili;
Mi piace essere il peggiore della compagnia.

Be, mi sembra giusto ;)
Dome
Newsgroup: it.comp.lang.c
Titolo: non cavo un ragno dal buco

salve a tutti.
dopo diversi anni di oblio ho la necessità di fare un po' di
programmazione in ambiente MSDOS ed ho pensato di mettere mano al c.
Ho scaricato diversi tutorial ed esempi.
Sono disponibili in rete, inoltre, diversi pacchetti gratuiti che
ho scaricato (LCC, Borland).
Il punto è questo: finchè voglio fare le elaborazioni più astruse
va tutto ok; posso aprire files, scriverci, creare array e chi ne
ha più ne metta.
Ma se voglio fare un menu' in modalità testo con la possibilità
di colorare le stringhe in maniera diversa a seconda della riga
selezionata con i tasti di rotta....  non ci riesco.
E' possibile che sia una cosa così difficile?
Sono proprio un niubbo di infimo livello?
Quando programmavo in CA Clipper, realizzavo un menù con venti
righe di codice; compilatore, linker ed avevo l' inizio dell'
applicativo che girava su qualsiasi macchina MSDOS.
Qualcuno sa darmi una dritta? 
grazie S:
--  
Postato da Virgilio Newsgroup: scopri i nuovi gruppi 
Eros, foto e video a 
http://newsgroup.eros.virgilio.it

 E' possibile che sia una cosa così difficile?
In C standard si, anzi e' impossibile (forse usando system.. ma non 
conosco bene dos). Se vuoi le scritte colorate e altre cose di quel tipo 
devi utilizzare delle librerie particolari, come PDCurses 
(
http://pdcurses.sourceforge.net/
), se invece lavori in emulazione (da 
windows) dovrebbe esserci un port delle ncurses, credo nella libreria di 
cygwin.
-- 
Devaraja (Xdevaraja87^gmail^c0mX)
Linux Registerd User #338167
http://counter.li.org

 ho scaricato (LCC, Borland).
Se usi il compilatore Borland, dovresti trovare con esso l'header 
conio.h, contenente i prototipi delle funzioni per la gestione, a basso 
livello, della tastiera e del video.  In ogni caso, per questioni 
specifiche alla piattaforma, rivolgiti al ng più adatto.

 Qualcuno sa darmi una dritta? 
dai un occhio a queste librerie:
http://tvision.sourceforge.net/
ciao.

 
http://tvision.sourceforge.net/
Da precisare, però, che la libreria Turbo Vision è scritta in C++, non in C.

 in C.
oops! pardon. l'ho infilata lì di botto senza pensare :)
ciao.