mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c
Titolo: fopen non crea il file

Ciao a tutti,
in un programma a volte capita che venga richiesta la creazione di un file con
fopen, il sistema non restituisce errori, vengono eseguite le istruzioni di
scrittura sul file, viene eseguita la fcloce ma il file non viene creato.
Questo evento č avvenuto sua su win98 che sul win2000. Il compilatore
utilizzato č il Builder C++ 4.0.
A buon rendere, Massimiliano
-----------------------------------------
Messaggio inviato con Excite Newsgroup.
http://www.excite.it/newsgroup

 scrittura sul file, viene eseguita la fcloce ma il file non viene creato.
Parecchio strano... Posta un po' codice... La bittomanzia e' un arte
che non conosco :-)
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG
Newsgroup: it.comp.lang.c
Titolo: Cancellare testo da un file

E' la prima volta che posto su questo newsgroup e ne approfitto per salutare
tutti. Veniamo alle cose serie: Ho un programma(ovviamente in C) che tra le
altre cose deve leggere da un file una sequenza di numeri e se è il caso
modificarli. In questo file i numeri sono qualche migliaio divisi l'uno
dall'altro da un punto. Tutto ok per leggere cosa c'è alla posizione n-sima
e scrivere un numero nel caso non ci sia niente (il file infatti all'inizio
è formato solo da punti), ma se trovo già un numero e voglio sostituirlo con
uno nuovo quale è la procedura? Quale è la funzione che mi permette di
sovrascrivere o di cancellare testo in un file? Grazie a chi avrà il buon
cuore di rispondere.
-------------------------------------------
Molta sapienza, molto affanno;
chi accresce il sapere, aumenta il dolore.

 wrote in message
news:wuH9b.321083$
lK4.10...@twister1.libero.it

Una prima banale soluzione e ricopiare il file fino al numero da
modificare su un altro file
inserire il nuovo numero e continuare a copiare il file. Questa
soluzione non va bene
se i file sono di grosse dimensioni, inoltre dovresti cancellare il
vecchio file rinominare
quello nuovo come quello vecchio
Un'altra soluzione e usare funzioni come fseek,fteel,fwrite (vedi l'help
del c) posizionarsi
sulla posizione da modificare e scriverci sopra.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 sulla posizione da modificare e scriverci sopra.
Con la (non scontata) precisazione che sul file potrai solo SOVRASCRIVERE i
dati, non rimuoverli accorciando il file o aggiungerli in append in un punto
arbitrario che non sia la fine.
Nel caso tu abbia bisogno di queste operazioni, l'unico modo è utilizzare la
prima soluzione che ti è stata consigliata, cioè copiando la porzione di
file buona da un'altra parte (memoria, file appoggio) ed effettuare le
operazioni di cut/append, scrivendo poi il file modificato.
larss
--
0110110001100001011100100111001101
1100110111001100110011001100010100
0000011010000110111101110100011011
0101100001011010010110110000101110
011000110110111101101101

Newsgroup: it.comp.lang.c
Titolo: [OT] Nuova Rivista

Scusate il (doveroso) off topic.
Vorrei informare i frequentatori di questo newsgroup che è in arrivo una
nuova rivista dedicata alla programmazione dei videogiochi. Il suo nome
è "Game Programming" (GP per gli amici). Potrete trovare maggiori
informazioni sul sito "
www.gameprogramming.it
".
Grazie per l'attenzione.

> Scusate il (doveroso) off topic.
si si non ne potevamo farne a meno..........
adesso posso tornare  a dormire ti ringrazio veramente


Anche qua r***i  i  c******i???
matura , che è ora!!
Carlo

 Carlo
vedo che sei idoneo a insegnarmi come :)))
si spam libero ....... :))
Newsgroup: it.comp.lang.c
Titolo: Manuale COMPLETO

Salve ragazzi,
    sono ormai 2 giorni ke mi dedico allo studio del linguaggio C e vorrei
sapere dove trovare una buona guida scaricabile da internet e ke sia
COMPLETA...
Vi ringrazio
Ruben ELMO

>     sono ormai 2 giorni ....
eh quanto tempo....
 cerca tricky C è un libro on-line.
--
Davide Consonni
(
davidec...@virgilio.it
)

  cerca tricky C è un libro on-line.
Purtroppo un libro solo discreto che va preso per quello che e': una 
raccolta di appunti in materia di programmazione, ormai datato, orientato 
alla programmazione sotto DOS, non molto conforme allo standard.
La cosa migliore e' comprarsi un buon libro (K&R magari, Deitel&Deitel se 
sei proprio terra terra a livello di conoscenze).
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

Newsgroup: it.comp.lang.c
Titolo: [?] Array di funzioni

Salve,
sto scrivendo un programma in ANSI C da utilizzare in un sistema embedded.
Per ottimizzare il codice, utilizzo un array di funzioni in modo che il
programma a seconda del valore di una variabile esegua una determinata
funzione.
Globalmente al modulo definisco l'array nel modo seguente:
void (*State_table[])() = {funzione1,funzione2,funzione3, etc};
mentre all'interno del programma richiamo la funzione nel modo seguente:
State_table[state]();
Tutto funziona regolarmente solo che ho il seguente problema:
Il compilatore considera l'array di funzioni come una variabile
inizializzata e quindi memorizza l'array nella sezione ROM pero' all'avvio
lo rialloca automaticamente nella zona RAM e questo mi da molta noia perche'
ho uno "spreco" di risorse che non posso permettermi.
La domanda e': come devo fare per dichiarare l'array come statico e quindi
venga memorizzato solo ed esclusivamente nella zona ROM?
Con gli altri array basta che li dichiari come Const pero' nel caso di array
di funzioni non ci riesco.
Grazie in anticipo per ogni aiuto
Giuseppe

"Giuseppeł" ha scritto

puoi provare cosi`
void ( *const State_table[] )() = { funzione1, funzione2, funzione3 };
oppure
typedef void (*fun_t)();
fun_t const State_table[] = { funzione1, funzione2, funzione3 };
HTH
ciao
Massimo


Grazie per l'aiuto !
La prima opzione non funziona mentre la seconda sembra funzionare a
meraviglia :-))
Pero' non riesco a decifrare il senso di questo tipo di dichiarazione :-(
Abuso della tua disponibilita' se ti chiedo gentilmente di spiegarmela?
Ancora grazie per l'aiuto
Ciao
Giuseppe

 > fun_t const State_table[] = { funzione1, funzione2, funzione3 };
istanzio e inizializzo un vettore costante di puntatori a funzione
del tipo appena definito.
ciao
Massimo
Newsgroup: it.comp.lang.c
Titolo: definire un valore in binario

scusate la domanda stupida, ma 
int i = 10 definisce il valore in decimale
int i = 0xA definisce il valore in esadecimale
e se volessi definirlo in binario?


Mmmhhh ... ho fatto un giro con Google, e non mi pare si possa fare
una cosa del genere ... solo decimali, ottali e esadecimali.
Forse si potrebbe fare qualcosa a livello di preprocessore, ma 
francamente non so cosa dirti ...

 ha scritto nel messaggio
news:pan.2004.07.06....@campana.vi.it...

Non puoi farlo.

 wrote in message
news:pan.2004.07.06....@campana.vi.it...

Beh fondamentalmente con int i = 10 hai definito int i = 1010...
Per metterli dentro a mano hai i tuoi bei operatori di bitwise... << >> & |
^

 scusate la domanda stupida, ma 

typedef enum {FALSE, TRUE}boolean;
boolean flag = TRUE;
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 boolean flag = TRUE;
Questa non è una soluzione.

"Andrea Laforgia" <x...@xx.xx> wrote in message
news:2kvijrF...@uni-berlin.de

Certo che è una soluzione. Solo perchè non è un tipo predefinito del
linguaggio?
Se gli servono valori binari funziona benissimo.


 Se gli servono valori binari funziona benissimo.
No, non è una soluzione al problema.
A lui serve inizializzare una variabile direttamente con il valore
binario.

Il titolo del post è "definire un valore binario" e io gli ho detto come
fare.


 fare.
Dei messaggi si legge, oltre al titolo, il contenuto.
Tu hai semplicemente illustrato in che modo definire una variabile di
tipo "booleano" che oltre a non essere una risposta al titolo del post
(binario <> booleano), non è neanche la soluzione per quanto
illustrato nel contenuto.
L'OP vuole semplicemente implementare qualcosa del tipo:
unsigned char miavar = 0b11001111;
Ma in C non esiste l'equivalente 0b del 0x esadecimale e quindi la
cosa non si può fare.

bla bla bla bla
:)
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 :)
Tanto per curiosità: ma questo ng è diventato il festival degli idioti
?


I fear so :P
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://www.cs.unibo.it/~mbellett
Linux registered user 299762 @ Linux registered machine 213003
Newsgroup: it.comp.lang.c
Titolo: Allocazione dinamica di matrici

Se voglio allocare dinamicamente un vettore uso i puntatori, nel seguente modo:
int *p;
...
Leggo dimensione del vettore
....
p=(int *)malloc(sizeof(int)*n);
e ci accedo tramite
p[4]=...
e nel caso di matrici?
non funziona se scrivo
int *p
...
Leggo la dimensione x e quella y
...
p=(int *)malloc(sizeof(int)*n*m);
...
p[3][2]=...
ma non funziona...
perchč?
come si fa?

 come si fa?
Perchè lui non può sapere quanto è lunga una riga :-)
In pratica non si fa... O a scelta si fa con il trucco.
Possibilità 1: tu ti allochi un vettore unidimensionale e poi ti fai le
moltiplicazioni:
se li organizzi in righe:
p[row*colcount+col] = ...
se li organizzi in colonne:
p[col*rowrowcount+row] = ...
Oppure:
Prova
int **p
p = (int **)malloc(sizeof(int*) * numrows);
for (size_t i = 0; i < numrows; i++) {
    p[i] = (int*)malloc(sizeof(int) * numcols);
}
e poi ci accedi come p[row][col] = ...
(spero di non aver scritto ca##ate... Sto ancora dormendo).
(il secondo metodo è più lento molto probabilmente :-) E di sicurooccupa più
spazio)
--- bye

Newsgroup: it.comp.lang.c
Titolo: Variabili globali con Builder C++

Salve,
sto scrivendo un programma con Borland Builder C++ 6, dove ho creato un
progetto con 3 file .cpp , ho bisogno di avere delle variabili globali che
siano visibili e modificabili nei vari moduli e classi (non tramite
puntatore).
Ho provato con "extern", per il compilatore e` OK ma il Linker da il
seguente errore :
"[Linker Error] Unresolved external '_frm' referenced from C:\...
quendo utilizzo la variabile "frm" nei moduli dove e` dichiarata extern.
Qualcuno sa darmi qualche indicazione su dove sbaglio? o come posso
risolvere il mio problema?
Grazie in anticipo
Michele
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Dichiara la tua variabile all'esterno di qualsiasi blocco in un
modulo. Negli altri fai la stessa dichiarazione con il prefisso
extern.

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

Dove posso trovare, non essendo tali funzioni contenute nella libreria
standard,
delle funzioni di grafica basilare che consentano di effettuare le più
semplici
operazioni come un putpixel() o un linexy() ?
Grazie.
spar...@ngi.it

 ... io , non lo so. mi spiace :-(
No dai , prova su 
www.delorie.com
Ciao
Roberto
Newsgroup: it.comp.lang.c
Titolo: Numero bit in una struct di bit

E' possibile risalire al numero del bit in una bitmask definita
mediante una struct di bit?
In pratica, se definisco:
  struct MyBitmask {
    unsigned int bit0:1;
    unsigned int bit1:1;
    unsigned int bit2:1;
    unsigned int bit3:1;
    unsigned int bit4:1;
    unsigned int bit5:1;
    unsigned int bit6:1;
    unsigned int bit7:1;
  };
posso definire una macro BITNUM() in modo che:
  BITNUM(MyBitmask, bit0) = 0
  BITNUM(MyBitmask, bit1) = 1
  BITNUM(MyBitmask, bit2) = 2
  BITNUM(MyBitmask, bit3) = 3
  BITNUM(MyBitmask, bit4) = 4
  BITNUM(MyBitmask, bit5) = 5
  BITNUM(MyBitmask, bit6) = 6
  BITNUM(MyBitmask, bit7) = 7
??
Ovviamente i campi bit0..bit7 avranno altri nomi.


Su due piedi non mi viene in mente come si potrebbe fare, ma in ogni
caso non capisco: cosa vorresti ottenere?
Ciao!

 caso non capisco: cosa vorresti ottenere?
Lavorando con i microcontrollori in C, spesso mi servono strutture di
bit per
risparmiare spazio in RAM. Pur essendoci il metodo "classico" di
maneggiare
le bitmask mediante AND, OR e maschere, preferisco dichiararle
mediante
una struct per poter scrivere:
  flags.on = 1;
anzichè:
  flags |= BITMASK_ON;
che è leggermente meno leggibile.
Però in alcuni casi ho delle funzioni che modificano un bit generico e
che
quindi hanno bisogno del numero di bit:
---
  struct MyBitmask {
    unsigned int bit0:1;
    unsigned int bit1:1;
    unsigned int bit2:1;
    unsigned int bit3:1;
    unsigned int bit4:1;
    unsigned int bit5:1;
    unsigned int bit6:1;
    unsigned int bit7:1;
  } bitm;
#define BITMASK_ON  0
#define BITMASK_ALARM  1
...
void setbit(unsigned char *ptr, unsigned int bit)
{
  *ptr |= 1 << bit;
}
unsigned int getbit (unsigned char *ptr, unsigned int bit)
{
  return (*ptr & (1 << bit)) != 0);
}
  ...
  setbit (bitm, BITMASK_ON);
  if (getbit(bitm, BITMASK_ALARM)
    printf ("Allarme\n");
  ...
---
Vorrei evitare di definire a mano i simboli BITMASK_ON..., ma
definirli semplicemente:
  #define BITMASK_ON  BITNUM(MyBitmask, bit0)
Anche perchè spesso cambiano di posizione (non per colpa mia) e non
voglio ogni volta
stare a cambiare il numeretto.
Lo so, utilizzando solo il metodo classico AND, OR avrei evitato tutto
ciò, ma ho già scritto
parecchio codice.

 parecchio codice.
Se tutti usano un metodo un motivo ci sarà! ;-)
Ciao!
P.S.
con i campi non bitfield si usa un trucchetto per sapere l'offset di
un campo di una struct (fai un cast di zero alla tua struttura e
prendi il membro, il cui indirizzo avrà l'offset "pulito") :
(int)(&((struct mystruct *)0)->member)
non so se questo ti può essere utile anche con i bitfields, ma non
credo...

 credo...
Sì, conosco il trucco e spesso esiste una macro apposita: offsetof().
Purtroppo non si può usare per i bit, anche se il compilatore avrebbe
tutte le informazioni per darmi questa informazione a compile time.
Peccato...
Newsgroup: it.comp.lang.c
Titolo: passare union per valore

Ciao a tutti,
Sto cercando un modo per passare una union per valore ad una funzione.
Ho scoperto che non è così facile come credevo (almeno in C -
ambiente Linux, GCC3.3.1)
Ecco cosa succede:
ho una union PIPPO contenente campi di tipologia diversa: interi,
float, strutture, puntatori a char... per
semplicità qui la riporto con un solo campo, visto che il problema si
presenta indipendentemente
dal contenuto della union:
typedef union
{
    int     topolino;
}PLUTO;
creo una variabile < var > di quel tipo e la passo per valore alla
funzione
void	PLUTO(UINT datatype, PIPPO var)
La funzione dovrebbe quindi considerare il campo della union relativo
al <datatype> fornito. Quindi
scrivo
PLUTO(1, var) ;
compilo e ottengo il seguente errore:
error: incompatible type for argument 2 of `PLUTO'
Tentativo bovino di capire qualcosa:
void	PLUTO(1, (int) var)
risultato:
error: cast to union type from type not present in union
NOT PRESENT IN UNION??? ma se l'unico campo presente è un int !!!
a questo punto alzo bandiera bianca e scrivo su it.comp.lang.c !!!

 ambiente Linux, GCC3.3.1)
Al contrario, e' banalissimo. Probabilmente ti sfugge
qualcosa di base sull'uso delle union. Meglio se le ripassi.
Prova a guardare questo esempio:
#include<stdlib.h>
#include<stdio.h>
typedef union
{
   int ii;
   double dd;
} intdoub;
void stampa(int kind, intdoub x)
{
   if (kind==0) printf("int %d\n", x.ii);
   else printf("double %.3f\n", x.dd);
}
int main()
{
   intdoub xxx;
   xxx.ii = 666;
   stampa(0,xxx);
   xxx.dd = 23.25;
   stampa(1,xxx);
   return 0;
}

 error: cast to union type from type not present in union
Il messaggio di errore non è esattamente chiaro, ma quello che stai
cercando di fare non è possibile a norma di standard.
Ci sono due problemi distinti:
- Passaggio by value di una union
Non è un vero problema, in C esiste solo il passaggio per valore, quindi
anche una union viene passata per valore:
void foo(union bar x);
...
union bar tmp;
tmp.i = 123;
foo(tmp);
e la union viene passata per valore.
- Passaggio di un immediate come union
Che è poi l'errore che incontri nel tuo codice. Una estensione del GCC
permette di fare un cast direttamente ad union, purchè il tipo
l'operando sia presente nella union:
union foo {
        int i;
};
void bar(union foo x);
...
bar((union foo)123);
bar((union foo)123.4); /* Errore! double non c'è nella union */
Il codice non è però portabile, lo standard non prevede il cast ad
union. Puoi però sfruttare l'operatore compound-literal del C99
(6.5.2.5) per creare un oggetto anonimo da passare alla funzione:
bar((union foo){123});
A livello di codice generato non dovrebbe esserci alcuna differenza (il
GCC è abbastanza furbo da evitare di creare veramente un oggetto
anonimo), la scelta fra i due costrutti dipende quindi dall'ambiente in
cui il codice verrà usato, anche se personalmente preferisco la seconda
forma.
Luca
-- 
Home: 
http://kronoz.cjb.net
Se non puoi convincerli, confondili.
Newsgroup: it.comp.lang.c
Titolo: Microprocessori Motorola.

C'è qualcuno di voi che sa programmare microprocessori della Motorola
in C?

 in C?
Qual è il problema?
Che microprocessore della motorola?


Mi hanno regalato il circuitino demo con il 60HC908QT4 e ci sto
smanettando sopra per imparare, ma non riesco ad usare gl'interrupt.
Saresti cosě gentile da darmi qualche suggerimento e/o esempio?
Grazie mille
Robi
:-))

 :-))
Ora sono a casa e quindi privo di documentazione.
Lunedi tenterň di esserti d' aiuto.
Ciao.
Z

<robi> ha scritto nel messaggio
news:65m8nvovtr92r6es7...@4ax.com...

Intanto se vuoi dare un occhiata ad un po' di documentazione (data sheet,
application notes...)
http://e-www.motorola.com/webapp/sps/library/documentationlist.jsp?rootNodeI
d=03t3ZGpnLn&nodeId=03t3ZGpnLn84498634&Device=68HC908QT4&DocTypeKey=10Ksd1nd

<robi> ha scritto nel messaggio
news:65m8nvovtr92r6es7...@4ax.com...

Ora ricordo...lo avevamo usato per un progetto...poi perň siamo passati ad
un PIC.
Ho trovato solo documenti cartacei. :(
Dovresti procurarti un data sheet dell' evaluation board, data sheet del
micro e manuale del compilatore.
Z
Newsgroup: it.comp.lang.c
Titolo: Separazione stringa a lunghezza variabile

Dunque, dopo svariate prove con strstr(), strchr() & Co. mi ritrovo a
girarvi il mio problema.
Avrei la necessità di ottenere una sottostringa da un'altra stringa
con lunghezza variabile.
Esempio:
da una stringa come questa:
"getparam.asp?txtnome=Pippo&txtcognome=Plutonio&citta=Disney"
vorrei ottenere questo:
"txtnome=Pippo"
"txtcognome=Plutonio"
...
E' ovvio che a priori non è possibile conoscere la lunghezza del campo
"txtnome", e tra l'altro non è neanche sicuro che nella prossima query
sia presente il campo "txtcognome".
All'inizio ho provato con 'strstr(nome,"txtnome")', ma poi non sapevo
come bloccarmi prima di "txtcognome" (se presente).
Spero di essermi spiegato :)
Rigrazio anticipatamente chi cercherà di aiutarmi.

 Spero di essermi spiegato :)
Non vedo perchè l'ordine deva essere rilevante. A te non ti interessa in che
ordine sono messi. Cmq la cosa più semplice è ragionare al contrario. Tu non
parti sapendo che la prima stringa è txtnome, ma parti cercando la prima
stringa e poi confrontandola con l'elenco di stringhe (txtnome, txtcognome)
che hai. Quindi, la prima volta parti cercando il carattere ? e parti da lì,
per le volte successive parti dalla fine della precedente stringa + 1.
Le stringhe con i comandi le organizzi così:
struct uncomando {
    const char *szComando;
    size_t nLen;
}
struct uncomando ucListaComandi[2];
size_t nNumComandi = sizeof(ucListaComandi) / sizeof(ucListaComandi[0]);
ucListaComandi[0].szComando = "txtnome="
ucListaComandi[1].szComando = "txtcognome="
for (size_t i = 0; i < nNumComandi; i++) {
    ucListaComandi[i].nLen = strlen(ucListaComandi[i].szComando);
}
size_t uUltimoComando = 0;
const char *szInizioStringa = NULL; /* al posto di null mettici il puntatore
all'inizio della tua stringona */
ora, uUltimoComando contiene il numero del comando a cui sei arrivato (se
hai trovato un comando che ha posizione 5, allora il prossimo comando dovrà
essere o il 6, o il 7, o l'8...)
for (size_t j = uUltimoComando; j < nNumComandi; j++)
{
    int iTrovato = 0;
    if (strnmcp(szInizioStringa, ucListaComandi[i].szComando,
ucListaComandi[i].nLen) == 0) {
        /* BINGO */
        uUltimoComando = j + 1;
        iTrovato = 1;
        break;
    }
}
if (iTrovato == 1) {
    /* fa quello che devi fare e poi fa avanzare szInizioStringa */
}
--- bye

Grazie, mi hai aiutato a risolvere un grosso problema :-)
Ciao

 ha scritto nel messaggio
news:18b3f153.04040...@posting.google.com...

Newsgroup: it.comp.lang.c
Titolo: INTERRUPTTT!!!

Salve vorrei un indirizzo dove trovare la lista degli indirizzi degli int da
usare con il C, con le relativa spiegaz. (se proprio non ci sono,va bene
anche senza)



Intendi la Ralf Brown Interrupt List ? Eccotelo :
http://www.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/WWW/ralf-home.html
ciao
Newsgroup: it.comp.lang.c
Titolo: Compilatori free C/C++ per Win

Salve a tutti.
Sono nuovo in questo NG e sono un principiante quindi mi chiedevo se era
possibile trovare da qualche parte dei compilatori C/C++ per Windows che
siano freeware.
Nel dubbio di aver chiesto troppo, vi saluto.
Grazie a chiunque possa darmi una mano.
Homer Simpson
«Non ti amo perché fallisci, ti amo perché ti impegni»
-Marge Simpson-
/// Per rispondere rimuovere "j" dall'indirizzo, grazie \\\

 siano freeware.
Si` certo, ci sono i gnu tools, portati dallo unix.  Credo che si
trovino su 
www.cygnus.com
.  Da notare e` che sono veramente free,
ossia liberi, nel senso che hai i sorgenti, e puoi modificarli e
distribuirli.
Ciao,
-- 
David Welton                          
http://www.efn.org/~davidw
 
	Debian GNU/Linux - 
www.debian.org
Newsgroup: it.comp.lang.c
Titolo: Programma C che lancia un altro programma

Salve,
            ho bisogno di creare un semplicissimo programma C (che giri
sotto DOS) che deve lanciare un programma Java chiamando il launcher
java.exe o javaw.exe. L'importante è che l'esecuzione del programma java
avvenga in un processo separato e del tutto indipendente e che non vengano
aperte finestre DOS.
Grazie in anticipo a tutti.


it.comp.programmare.win32
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */
Newsgroup: it.comp.lang.c
Titolo: Come scegliere il linguaggio di programmazione

Ciao da Gabri
Sono un novellino nel campo della programmazione, sto leggendo due libri sul
linguaggio C e non conosco altri linguaggi (parlo e scrivo poco anche in
Italiano !!!;-).
Ho iniziato questo studio da autodidatta perché desidero crearmi un
programma che ha queste caratteristiche:
- Guidare passo passo l'utente attraverso domande da spuntare con il mouse
- Grafica ridotta al minimo per la massima portabilità e semplicità di
utilizzo su tutti i PC e OS.
- Ad ogni risposta il programma deve scrivere il risultato in sequenza in un
file *.txt e salvarlo con un certo nome.
- Le domande che il sistema pone devono essere di tipo ad albero, cioè
conforme alla risposta il programma cambia ramo e domande successive.
- Al temine delle risposte il programma dovrebbe essere il grado di accedere
ad un database di schemi elettrici e stampare quello più appropriato dettato
dalle risposte stesse, e in più avere il file *.txt da poter copiare magari
su un floppy.
Ora essendo io uno sbarbato in questo ambito la prima cosa che mi spiazza è
"che linguaggio o linguaggi adopero per raggiungere lo scopo?". Ho pensato
al C per via del fatto che mi pare sia quello più portabile, ma penso che
anche un linguaggio che giri su Web possa andare bene, non so!
Come si sceglie il linguaggio per scrivere un programma? Sulla base di quale
studio o processo logico?
Ciao e grazie per la pazienza e l'aiuto
--
Ovunque trovi un'Amico


Spero di esserti stato un po d'aiuto.
Ciao

 studio o processo logico?
E´ piu´che altro una decisione del tipo quanto tempo hai, che problemi di
performance ci sono
che librerie hai gia´disponibili, vincoli del cliente etc...
La soluzione non e´sempre facile e comunque avrai sempre qualche vantaggio e
svataggio.
ciao


 wrote in message
9j8mdm$s62$1...@pluto.news.dsi.unimi.it...


Newsgroup: it.comp.lang.c
Titolo: Tipo dell'array bidimensionale

La domanda è decisamente stupida, ma non ne vengo fuori. Che tipo ha un 
array bidimensionale?
Pensando alla sua struttura, non dovrebbe essere altro che un [tipo]*, ma 
non mi funziona.
Mi spiego:
Ho una funzione da me definita, e le devo passare una matrice di double. 
L'input che ho specificato è double*. Quando passo l'array, definito con 
"double array[l][m]", il compilatore mi ritorna "passing argument 1 of 
'nomefunzione' from incompatible pointer type".
Cosa specifico nell'input?
-- 
Lorenzo

.
-- 
Lorenzo
Newsgroup: it.comp.lang.c
Titolo: Intervalli di tempo e printf()

Questo semplice programma stampa ad intervalli regolari 10000000 20000000
30000000, andando a capo ogni volta, quello che non capisco č:
se non faccio andare a capo la stampa con \n, il programma non stampa i tre
numeri ad intervalli regolari ma "attende" la somma dei tre intervalli e poi
stampa i tre numeri nello stesso istante, qualcuno mi puň spiegare il
perchč?
#include <stdio.h>
main()
{
int i;
  for (i = 1; i <= 30000000; i++){
     if (i % 10000000 == 0)
         printf("%d\n", i);
   }
return 0;
}

         printf("%d\n", i);
          fflush(stdout);
-- 
Marco Barisione (ICQ 84277092)

Marco Barisione (ICQ 84277092)
Grazie, ha funzionato!
NB: in realtà se uso
 printf("%d\n",i);
  funziona lo stesso perchè stampa un il numero e poi va a capo, continua ad
incrementare i, poi stampa il secondo "traguardo" e così per il terzo....
però io volevo ottenere intervalli di stampa senza andare a capo quindi:
printf("%d",i);
e per fare questo fflush(stdout);  ha funzionato
....allora ne deduco che anche \n forza la scrittura, giusto?

....allora ne deduco che anche \n forza la scrittura, giusto?
Non e' detto. Puoi settare tu a priori come vuoi che avvenga la
bufferizzazione.
In C standard mi pare usare setbuf() e setvbuf() per controllare il
buffer associato allo stream. Queste funzioni chiamano un'apposita
system call che controlla appunto la bufferizzazione dell'I/O.
Per default mi pare sia impostata come: stampa a ogni newline. Questo
per l'IO a video, per l'output su file la politica mi pare sia diversa
(e consista nello scrivere effettivamente su file molto piu'
raramente).
-- 
Mox

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

buonasera, ho scritto questo programma che calcola la somma degli
elementi di un array letti da file fiducioso nel suo funzionamento,
ma mi restituisce sempre 0. qualcuno mi sa dire dov'è l'errore e mi
può dare un commento generale al programma? grazie
ps ho omesso tutti i controlli per questioni di leggibilità.
#include<stdlib.h>
#include<stdio.h>
int main() {
  int n;
  double *vett;
  FILE *fd;
  int res;
  int i;
  double sum=0.0;
  fd=fopen("io.txt", "r");
  n=0;
  while(1) {
    res=fscanf(fd, "%d\n", &i);
    if( res==EOF )
      break;
    else
      n++;
  }
  printf("Il file contiene %d elementi\n", n);
  fclose(fd);
  fd=fopen("io.txt", "r");
  vett=malloc(n*sizeof(double));
  for(i=0; i<n; i++)
    {
    fscanf(fd, "%f\n", &vett[i]);
    sum += vett[i];
    }
  fclose(fd);
    printf("la somma è %f\n", sum);
    free(vett);
  return 0;
}

 può dare un commento generale al programma? grazie
per calcolare la somma dei numeri basterebbe una
sola passata e non c'e' bisogno di vett.
g.
Newsgroup: it.comp.lang.c
Titolo: per pulire lo schermo

Sono di nuovo qui... dopo i dadi ecco un altro problemino...
Per pulire lo schermo (Il "cls" del buon vecchio dos tanto per 
intenderci) ho trovato che si deve inserire la stringa
puts("\33[2j");
tuttavia al posto che pulire tutto mi disegna una freccetta e mi scrive 
"2j"
sicuramente ho dimenticato di inserire una libreria e una costante...
cosa? quale? dove?
ciao ciao
-- 
-Diego (Atos)-
-L'uomo č superiore agli animali-
-(Fanno eccezione il nano e la giraffa)
-Alessandro Bergonzoni-
-Togliere NOSPAM per la risposta in privato-

 -L'uomo è superiore agli animali-


 però devi aggiungere la libreria conio.c
semmai conio.h che funziona solo con i compilatori borland
-- 
Rhymes
rhy...@myself.com
" ride or die "

cosa? quale? dove?
Quello e' un comando ANSI, funziona solo se carichi un driver ANSI.
ciao, acc.   
a...@libero.it

 ha scritto nel messaggio
news:pan.2002.07.04.23...@myself.com...


 puts("\33[2j");
http://www.termsys.demon.co.uk/vtansi.htm
Personalmente uso 
write(1,"\33[H\33[2J",7);
per pulire lo schermo (terminale ansi compatibile, linux)
Ciao
-- 
No matter. Try again. Fail again. Fail better.

 Se invece include conio.c va perfetto
Allora, non è corretto; i problemi salterebbero se usi + file .c e in ognuno
includi conio.c; dalle opzioni del progetto, struca el boton "load object
files" e carica dalla directory lib conio.o, e rimuovi lo spazio nella
casella di testo che inserisce all'inizio(serve per separare più percorsi,
ma non deve essere messo prima del primo; è un bug); questo perché in libc.a
non è incluso il file conio.o. Ciao
--
Paolo Giarrusso
Per rispondere togliere solo "TOGLIMI" dall'indirizzo, non _spam.
Newsgroup: it.comp.lang.c
Titolo: array apriamo un dibattito

ciao
sono pochi giorni che "mastico" C  (p.s. ma perche' non mi drogo come tutti
gli altri ragazzi?)
stavo analizzando questo prog per familiarizzare con gli array, vorrei
sapere il perche' di:
 " posiz=-1;
   for(i=0; i<=7 && posiz == -1; i++) "
-------------------------------------------------
#include<stdio.h>
int main (void){
 int temperatura[8],temprif;
 int i,posiz;
 /* acquisizione temperature */
 for(i=0; i<=7; i++){
  printf("rilevazione temperatura n° %d : ",i);
  scanf("%d",&temperatura[i]);}
  printf("temperatura da ricercare :  ");
  scanf("%d",&temprif);
  /* scansionamento vettore temperature */
  posiz=-1;
  for(i=0; i<=7 && posiz == -1; i++)
  {
   if(temprif == temperatura[i])
    posiz=i;
  }
   /* risultati ricerca */
  if (posiz==-1)
   printf("non esiste");
  else
   printf("presente alla rilev. n° %d",posiz);
}
p.s. ma i programmatori di C e' vero che sono astemi????
ciao!!!!!

 
No... chi mette in giro queste voci atte a denigrare tutta la categoria?
mentre ti rispondo ho una bottiglia di birra in mano...
Ciao,
						Dino
-- 
**** per rispondemi in privato, gira 'vinu' nel mio indirizzo ****
Se e' vero che ad ogni rinuncia corrisponde una contropartita
considerevole privarsi dell'anima comporterebbe una lauta 
ricompensa (ma l'eccezione alla regola insidia la norma).

 - quando trovo quella cercata esco.
Era possibile evitare il "break" anche senza bisogno della
variabile di appoggio...
   for (i=0; i<8 && temperatura[i]!=temprif; i++)
     ;
   if (i==8) ...
Non ho nulla di personale contro il break quando usato
con giudizio (ad esempio nel loop che presenti la cosa
e' secondo me accettabilissima) ... ci sono anche casi
in cui secondo me la soluzione migliore si basa su
goto... pero' e' veramente grande il rischio di farsi
prendere la mano e finire con lo scrivere cose
difficilmente manutenibili dove uno statement su tre
e' continue/break/goto. Ho visto programmatori in gamba
che sono finiti con lo scrivere per abitudine cose come
salti goto da un ramo di un if all'interno dell'altro
(i problemi con queste cose vengono fuori in manutenzione).
Personalmente anche io eviterei di mostrare cose basate
su break, continue oppure goto nelle primissime fasi di
apprendimento del linguaggio.
Andrea

 wrote in message
748d71e3.02101...@posting.google.com...


 (i problemi con queste cose vengono fuori in manutenzione).
A chi lo dici! uno dei miei principali lavori e' fare manutenzione e
sviluppo di un programma con oltre 100 file sorgenti, e di circa 500.000
righe di codice, scritto nell'arco di 10 anni da decine di persone, molte
delle quali non lavorano piu' per quella ditta. Se ti e' mai capitato una
cosa del genere sicuramente saprai quali orrori informatici si possono
trovare in questi programmi...
Ciao,
						Dino
-- 

Newsgroup: it.comp.lang.c
Titolo: Macro che si espande su piu' linee

Mi serviva una macro, qualcosa come:
#define LANGUAGE_ITA (file) ...
che si espandesse in:
#include "..\psttxtit.h"
#define BASE_ID LANGUAGE_ITALIANO
#include "file"
          ^^^^ parametro della macro, il resto e' fisso
e poi, il mio compilatore non mi permette di includere 2 volte lo stesso file
(senza che ci sia nessuna esplicita #ifdef e #define all'inizio del file); e'
normale o sta dando i numeri ?
(lo includo due volte perche' cambiano delle macro esterne e quindi definisco
delle cose diverse)
grazie in anticipo
--
Greetings, Alessandro
http://www.esalab.it
-----------== Posted via Deja News, The Discussion Network ==----------
http://www.dejanews.com/
       Search, Read, Discuss, or Start Your Own    

normale o sta dando i numeri ?
Sta dando i numeri; oppure ha (e tu stai usando ovvero
non-disabilitando) qualche estensione non-standard (e
questa e` abbastanza popolare) che "ottimizza" le cose
in questo modo ("#pragma once", ad esempio, e` una
direttiva del genere, implementata da molti compilatori).
Mi pare ad esempio che alcuni release di gcc funzionino
cosi` per default (non mi ricordo di quali versioni si tratti
e quale sia lo switch da passare al compilatore per non
avere questa estensione, ma sospetto che l'abituale
combinazione di -ansi -pedantic ecc ecc funzionerebbe).
Alex

normale o sta dando i numeri ?
Penso sia meglio se fai al ifdef...
Ciao!

Newsgroup: it.comp.lang.c
Titolo: Vettore e matrici

Ragazzi ho un problema con gli array...vi spiego la situazione..
ho un vettore chiamato di N elementi --> A[N]
ed ho una matrice  B[R][C] dove riga e colonna sono variabili
dall'utente e hanno una dimensione max di 100.
adesso...il problema è..avendo degli elementi in A devo cercare in B
le coppie che rappresentano nella matrice..esempio
A={2,5,3}
   B
1) 2   5  <--
2) 4   3
3) 1   4
4) 2   3  <---
5) 5   2  <---
praticamente questa funzione mi deve ritornare VERO poiche c è  almeno
una coppia formata dagli elementi di A  (2,5) (2,3) (5,2)
rispettivamente agli indici 1,4,5. Spero di essere stato chiaro..

 Spero di essere stato chiaro..
Si'. Ma qual e' il problema?
-- 
Cybertoldo
Per rispondermi via email, sostituisci moc.liamg con 
gmail.com

Cybertoldo ha scritto:

il problema è trovare quelle coppie non riesco a fare i cicli giusti.

 il problema è trovare quelle coppie non riesco a fare i cicli giusti.
In questi casi posta il codice C problematico. Non puoi pretendere che 
qualcuno ti scriva tutto il programma.
Ciao


Cybertoldo ha scritto:

Purtroppo non posso postare perchè se no darei soluzioni ad altre
persone.Cmq sia il testo è come l'ho dato io all'inizio immagina di
fare una funzione che prende gli elementi del vettore A e verifichi che
formino almeno 1 coppia per elemento...il testo del mio problema è
quello del primo post io ce lo cosi.
Newsgroup: it.comp.lang.c
Titolo: Dove è il problema? chiedo aiuto!

Ciao a tutti ho il seguente problema: alla creazione dell'eseguibile di
questo programma:
#include stdlib.h
#include stdio.h
main()
{
printf("Ciao");
return(0);
}
mi da questo errore:
Linker Error (Severity 4)
No matching files for file specification:
 "c:\mcw\ccl.lib"
Linker Error (Severity 4)
 Module "a" in file "c:\windows\desktop\c\raz.obj"
 references unresolved external "_printf"
 at offset 0008H in segment "_text".
Linker Error (Severity 4)
No start address.
Build completed
Da quanto ho capito manca una libreria giusto? dove la trovo?
Grazie un saluto
--
----------------------------------------------
ICQ NUMBER: 147421455
http://www.posieidon.3000.it
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

}
Allora
Il main va' dichiarato con valore di ritorno di tipo int.
Per includere correttamente gli header devi usare le sequenti
sintassi:
1) #include "libreria.h"
   Gli indichi di cercare la libreria nel path corrente, oppure in un 
   path specificato da te, comunque si intente a partire dal path 
   corrente.
2) #include <libreria.h>
   Gli indichi di cercare la libreria nel path di default di sistema 
   per gli header (sotto linux molto probabilmente li troverai sotto 
   /usr/include).
La tua sintassi non e' lecita, pero' e' un errore che dovrebbe
segnarti il compilatore, non il linker e dicendoti espressamente che
la sintassi e' errata.
Se anche dopo questa correzione non funziona significa che non e' in
grado di trovare il compilato della libreria standard (o non ce l'hai
o non e' nel path), ma li non e' piu' un problema di C.
-- 
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."

>return(0);
E questo? Non è più corretto omettere le parentesi? In ogni caso qual'è
la differenza?
Nicholas


la differenza?
Equivalente nelle 2 versioni.
Tutte le funzioni vogliono le parentesi, cosi' come alcune keyword del
C che per semplicita' vengono parsificate come funzioni.
La return fa' eccezione: la puoi chiamare con o senza parentesi, sono
ammesse tutte e 2 le forme.
_Non_ puoi invece con la exit, che e' una vera e propria funzione e
vuole le parentesi.


 ammesse tutte e 2 le forme.
'return' e`  una keywork, le  parentesi non servono. Metterle non  e` un
errore, visto che  (0) e` comunque un'espressione che  vale 0. Spesso si
usa la forma:
return (a + b);
per rendere  piu` chiaro qual'e` il  valore di ritorno. In ogni  caso il
valore di ritorno e` il valore dell'espressione che segue la return (non
esistono, cioe`, problemi di precedenza).
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Non ho ancora capito se il mio cane e` maschio o femmina:
quando fa la pipi` si chiude in bagno

 o non e' nel path), ma li non e' piu' un problema di C.
-- 


Chiarissimo:
grazie a entrambi.
Ciao


 apposto?
L'opzione -L del compilatore (gcc) ti permette di specificare i path
dove il linker puo' cercare le librerie.
ciao
luca
Newsgroup: it.comp.lang.c
Titolo: operatori?

ciao a tutti, in c si puo definire un nuovo operatore, ad esempio ==, per
un tipo struct creato dall'utente, o si puo fare solo in c++?
grazie
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 un tipo struct creato dall'utente, o si puo fare solo in c++?
Solo in C++.
MM

 un tipo struct creato dall'utente, o si puo fare solo in c++?
Non si può fare, in C.
Ma questo "syntactic sugar" lo superi con una funzione (cosa che un
operatore overloaded _è_ nel profondo dell'anima).


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

 Potete aiutarmi?
Si potrebbe intendere in due sensi:
1. Una matrice i cui elementi sono stati allocati dinamicamente (in
contrapposizione all'allocazione automatica).
2. Una matrice che ha la possibilità di ridimensionarsi in run-time
(come la classe std::vector della libreria standard del C++).
EMG

In Basic e' implicito che essa sia statica.
Scusate l'eresia, ma il Visual Basic  implementa le matrici dinamiche :-)
Ciao, Carlo
altieri@infostudi aggiungere .it

La matrice non =E8 una struttura dati statica per definizione?
Io credo che bisogna distinguere l'aspetto teorico dall'aspetto pratico.
Cioe', una matrice e' una struttura dati, ma la sua implementazione puo' essere
sia statica che dinamica (sempre che il linguaggio lo permetta).
In Basic e' implicito che essa sia statica.
Cosi' anche in Fortran.
In Pascal e' gia' diverso : puo' essere statica, ma dichiarando un puntatore ad
una matrice, si puo' allocare memoria dinamicamente per essa e quindi diventa
una struttura dati dinamica.
In realta' nessuno dei linguaggi citati consente di trattare le matrici come il
linguaggio C.
Cio' che il pascal offre (parlo del pascal standard, non del Turbo) , ad
esempio, non e' una gestione realmente dinamica delle matrici, perche' bisogna
definire comunque un tipo "matrice", dichiarandone le dimensioni, e poi un
puntatore ad esso.
Ma non si puo' ampliare la matrice (e in questo consiste la vera dinamicita')
oltre i limiti dichiarati.
In C, invece, dato che puntatori ed array possono intercambiarsi la notazione
per l'accesso ai propri elementi, si puo' dichiarare una matrice in entrambi i
modi : statico e dinamico.
In modo statico, per esempio, come :
double matrice[5][3] ;
In modo dinamico, applicando il trucco dei puntatori, da trattare in un secondo
momento come array e definendo, per esempio :
double **matrice ;
Ovviamente nel primo caso la memoria in cui salvare i "double" che costituiscono
la matrice viene riservata in modo automatico a tempo di run-time, ed e' sicuro
che una volta compilato il programma, la matrice potra' essere utilizzata.
Mentre nel secondo caso bisogna allocarla dinamicamente, per l'appunto, con
un'istruzione tipo "calloc()".
Tuttavia, pur compilando il programma, non si e' sicuri che, a tempo di
run-time, vi sia memoria sufficiente per gestirla.
--
Posted from 
itaca.ulysse.it
 [195.223.254.1]
via Mailgate.ORG Server - 
http://www.mailgate.org

Scusate l'eresia, ma il Visual Basic  implementa le matrici dinamiche :-)
Perche' il Visual Basic non e' il Basic di cui parlavo io :)

Newsgroup: it.comp.lang.c
Titolo: Stringhe senza dimensione prefissata

Poniamo che debba passare ad una funzione una stringa.
int miafunzione(char *stringa);
Posso definire la mia stringa in questo modo
char stringa[MAXLEN] con MAXLEN = massima lunghezza
ma ho il problema che la stringa è di dimensione prefissata.
Vorrei fare in modo che non lo sia.
Devo quindi utilizzare l'allocazione dinamica della memoria. 
Dopo aver definito la stringa con:
char *stringa;
posso fare una cosa del genere?
stringa=(char *)malloc(sizeof(char *));
Nel mio computer sembra funzionare, però non capisco il motivo. Malloc
riserva spazio per n bytes, in questo caso n bytes sono sizeof(char *)
ovvero uno spazio corrispondente allo spazio occupato da un puntatore.

 ovvero uno spazio corrispondente allo spazio occupato da un puntatore.
	Con la dichiarazione dici al compilatore che "avrà bisogno" di spazio
per contenere ALMENO un carattere.
Con la malloc, invece, allochi spazio sullo stack, e quindi "ti appropri"
di quello spazio...
Ciao :-)

 	Più che "posso", DEVI... :-)
NO NON DEVI ! E' SBAGLIATO !!
siccome tipicamente un puntatore (char *) occupa 4 bytes,
l'istruzione sopra alloca un array di 4 bytes e memorizza
il puntatore iniziale nella variabile puntatore stringa,
che quindi puntera' ad una stringa lunga al massimo 3 caratteri
(piu' il terminatore).
Quello che devi fare per riservare spazio dinamicamente per
una stringa di N caratteri e'
char *stringa;
stringa = (char *) malloc(N+1); // il cast a (char *) non e' necessario
o se preferisci
stringa = (char *) calloc(N+1, sizeof(char));
(Di solito la calloc azzera la memoria allocata, la malloc no)
in questo modo viene allocato un array di N+1 bytes (o caratteri)
sufficiente a memorizzare una stringa lunga N caratteri
piu' il terminatore (il byte uguale a 0).
quindi puoi fare
char *stringa;
stringa = malloc(6);
strcpy(stringa,"pippo");
se poi vuoi poter cambiare la dimensione della stringa durante
l'esecuzione allora puoi considerare di usare calloc() o malloc() in
congiunzione con free(), oppure usare l'istruzione realloc().
ciao,
g.

 stringa=(char *)malloc(sizeof(char *));
stringa=malloc((N + 1) * sizeof(char));
dove N è il numero massimo di caratteri della stringa.
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

 di quello spazio...
Non sullo stack ma sullo heap.


No, allochi spazio *esattamente* per un puntatore a carattere.
Si infatti ho fatto un bel programmino con due puntatori e l'area di
memoria puntata dal primo tendeva a sovrascrivere il secondo...
bene se voglio ottenere una stringa che cresce e decresce dinamicamente
dovrò allocarmi memoria ad ogni modifica della lunghezza con realloc.

Giovanni Resta <g.r...@iit.cnr.it.nospam> scrisse:

Grazie, risolti tutti i dubbi.
Newsgroup: it.comp.lang.c
Titolo: Riconoscimento dati inseriti

Qualcuno potrebbe indicarmi come riconoscere se i dati inseriti dall'utenete
sono un numero??
Il mio scopo è consentire soltanto l'inserimento di dati numerici.
E' chiaro che devo salvare ciò che viene inserito, inizialmente in una
stringa (penso), altrimenti mi crasha il programma. Volevo fare una
procedura che, passatagli la stringa mi ritornasse 0 nel caso che questa
contenga un numero e mi mettesse lo stesso in una variabile float,
altrimenti 1. La procedura deve accettare numeri reali comprensivi
eventualmente di segno + o -.
Confido in una vostra mano.
Ciao

 eventualmente di segno + o -.
leggi la stringa e la passi a sscanf:
sscanf(stringa,"%f", &numero);
la funzione restituisce 0 se non e` stata in grado di convertire la
stringa in float.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Sono un mirabile incrocio tra Tarzan e Giacomo Leopardi.
In me convivono tutte le doti intelluttuali di Tarzan e
tutta la prestanza fisica di Giacomo Leopardi.
A. Borsani


Errore! E se inserisco 0? La funzione mi sbaglia!
int read_num(float &v) {
  char buf[32];
  int i;
  scanf("%s%*c", buf);
  v = atof(buf);
  for(i=0; i < 32 && buf[i]; i++)
    if(buf[i] < '0' || buf[i] > '9') return 1;
 return 0;
}
Questo funziona di sicuro in modo sicuro... ma è macchinoso!!

 Errore! E se inserisco 0? La funzione mi sbaglia!
No
il prototipo e`:
int sscanf( const char *str, const char *format, ...);
quindi
if (sscanf(stringa,"%f", &numero) == 0) {
	printf("Nessuna conversione");
	...
}
se inserisci 0 sscanf restituisce 1 e mette 0 in "numero"
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Se il  destino di un uomo  e` annegare, anneghera` anche  in un bicchier
d'acqua.
Proverbio yddish


Penso che anche la tua funzione abbia dei problemi, ovvero mi ritorna errore
se inserisco numeri con la virgola (o meglio con il punto, es. 5.23) ed
anche se inserisco numeri specificando il segno (es. +2 o -3).
Io per risolvere il problema, ho confrontato tramite la funzione strpbrk il
primo elemento della stringa inserita con quelli della stringa
"123456789.-+" e gli altri con la stringa "123456789."
Si poteva anche evitare di usare la strpbrk, ma viene un po' piů laborioso
ancora.


Si ok, ma se io sbaglio di inserire un numero .... come si comporta la
funzione?  Cioč se io inserisco 45A che fa la funzione? Per esempio con
atoi, (e penso anche atof) mi restituisce il numero 45....se il numero non
contiene nemmeno un 1/2 numero, mi restituisce 0!!! Sscanf e Scanf si
comportano allo stesso modo?

"Andrea" <a@b.c> ha scritto nel messaggio
news:LRkD6.48857$s93.3...@news.infostrada.it...

In effetti si...mi ero dimenticato di inserire anche . e + e -, ma pensavo
che serviva risolvere il problema solo per gli interi senza segno!!! PARDON!
Non pensavo ti servisse anche tutta la trafila, o almeno non mi sono
accorto!
Newsgroup: it.comp.lang.c
Titolo: controllo precedenza date

Chiedo il vostro aiuto per un piccolo problema.
Sto scrivendo un programma in C sotto LINUX,
sto avendo difficoltà a valutare le date.
Ho prelevato le informazioni di modifica file tramite la funzione STAT che
restituisce un puntatore ad una struttura.
Ora, avendo due date di tipo time_t, come faccio a sapere qaul'è la data +
vecchia.
Ho già provato ad utilizzare la funzione difftime(data1,data2) ma mi
restituisce un valore double sempre positivo!
grazie 1000!

...


 restituisce un valore double sempre positivo!
difftime esegue data1 - data2 ed il risultato e` negativo se data1 <
data2.
#include <stdio.h>
#include <time.h>
int main () {
	time_t data1, data2;
	data1 = time(NULL);
	data2 = data1 + 1000;
	printf("%f\n", difftime(data1, data2));
	return 0;
}
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Software is like sex; it's better when it's free.
Linus Torvalds

Newsgroup: it.comp.lang.c
Titolo: AIUTOOOO FUNZIONI POW E EXP IN UNIX

Non riesco, compilando un sorgente C, in ambiente UNIX a utilizzare le
funzioni double pow(double)   e   double exp(double)  perche' in fase di
compilazione il compilatore dice che non sono identificabili: qualcuno mi sa
dire come diavolo si fa..........

...

L'errore lo segnala il linker (ld: undefined symbol _pow ....) o il
compilatore ?
Assicurati di aver inculso <math.h> nei file che chiamano quelle funzioni e
di linkare con la libreria matematica (cc .... -lm)

 dire come diavolo si fa..........
Devi indicare al compilatore i prototipi delle funzioni includendo
math.h e devi dire al linker di includere le librerie matematiche. Non
so però come si faccia esattamente in quanto immagino dipenda
strettamente dal compilatore utilizzato. Se fosse il gcc c'è l'opzione
-lm.
EMG