Tags:
create new tag
view all tags
---++ Domande (e risposte) sull' HomeWork6aa0203 * Inserite le vostre domande usando la form [[#form][in fondo alla pagina]] * Vedi anche: HomeWork6aa0203, SoluzioneHomework6aa0203, RisultatiHomework6aa0203. ---- %TOC% ---- ---+++ Pulizia Mi sono permesso di fare pulizia in questa pagina e lasciare questo spazio per le Domande dell Homework 6 visto che è stato messo on line! BUON LAVORO A TUTTI .. io gia non c'ho capito niente! -- Comment added by Users.MatteoLaBella on 25 Nov 2002 ---- ... ma se non l'ho ancora finito di scrivere!!!! -- Comment added by Users.AndreaSterbini on 25 Nov 2002 ---- ---+++ "Bersaglio mobile" e "non dico altro" Stavolta cercate di essere educati. -- Comment added by Users.AndreaSterbini on 25 Nov 2002 ---- ---+++ Scusi ma una settimana..... ...mi pare un po poco. Solo per il fatto che ci sta' gente che lavora, o che magari ha da prepararsi qualche esonero.... per non parlare di chi ha l'uni il pomeriggio. Spero che non voglia fare come Bill e costringerci a fare la lunga marcia :) Quindi non si potrebbe spostare la consegna a venerdi' 5 ?? -- Comment added by Users.LeonardoParisi on 26 Nov 2002 ---- No -- Comment added by Users.AndreaSterbini on 26 Nov 2002 ---- Ok come non detto non fa nulla ... cmq finalmente qualcosa di serio -- Comment added by Users.LeonardoParisi on 26 Nov 2002 ---- Buon lavoro! -- Comment added by Users.AndreaSterbini on 26 Nov 2002 ---- ---+++ al solito ...nessun controllo sulla correttezza dell'input? -- Comment added by Users.LauraRavagli on 26 Nov 2002 ---- nella parte facoltativa vengono citati i controlli da effetturare<br> pero' estendo la domanda: per quanto riguarda la data bisogna controllarla<br> solo al momento dell'inserimento o anche nella ricerca?? -- Users.TizianoMorgia - 26 Nov 2002 ---- ...non l'avevo letto... ma non dirlo a nessuno :) -- Comment added by Users.LauraRavagli on 26 Nov 2002 ---- ---+++ librerie <font color="red">quali librerie (oltre alla stdlib.h e alla stdio.h)si possono usare?</font> -- Comment added by Users.CristianoMarra on 26 Nov 2002 Date voi dei suggerimenti, io li vaglierò. -- Comment Users.AndreaSterbini - 26 Nov 2002 ---- ---+++ scusate, eh.. la mia domanda è la seguente: <verbatim> struct prova { int numprova; ... }; ... struct prova myprova; ... visto che mi piacerebbe usare direttamente la struttura per l'input della scanf (invece di usare una variabile di appoggio) c'è modo di fare una cosa del genere: scanf("%d",myprova.&numprova); </verbatim> ossia come mi ritorno l'indirizzo di una variabile in una struct?? grazie a chi prova a rispondermi (ho già in mente un paio di persone :) ) -- Comment added by Users.LauraRavagli on 26 Nov 2002 forse <verbatim> scanf("%d",&myprova.numprova); </verbatim> ti viene meglio -- Users.ArcangeloTripi - 26 Nov 2002 grazie c'avevo provato, ma chissà che avevo scritto e non mi funzionava :) ---- ---+++ Giustificare l' output Scusi prof. Sterbini, ma nell' output che lei ci ha mostrato, il nome, il cognome e i vari dati sono divisi da barre verticali ( tipo |....................|) ma quelle barre dobbiamo fare si che compaiano nello stampare la tabella di output? Eppoi non riesco a chiarire i tipi di controlli; nella parte base (non facoltativa) è necessario implementare qualche controllo? ad esempio sull' errato formato della data o su date inesistenti? Grazie Diego<br> <br>-- Comment added by Users.DiegoPacifici on 26 Nov 2002 ---- per le || la risposta è sì (guarda il paragrafo *stampa*) è facoltativo gestire gli errori (ossia la gestione fa parte dell'implementazione facoltativa) -- Comment added by Users.LauraRavagli on 26 Nov 2002 ---- ---+++ print o stampa? <font color="gray">scusi prof lei ci ha detto che con la parola "stampa", stampa tutto il contenuto, ma sull' esempio c'è la parola "print", quale dobbiamo usare?</font> -- Comment added by Users.CristianoMarra on 26 Nov 2002 *print* Attenti! il bersaglio ha cominciato a muoversi! :-) -- Comment Users.AndreaSterbini - 26 Nov 2002 ---- ---+++ Grazie Laura Diego<br> -- Comment added by Users.DiegoPacifici on 26 Nov 2002 ---- ---+++ Domanda importante Non ho capito molto bene come deve funzionare l'inserimento delle voci nella rubrica e cioè: L'inserimento deve funzionare a <b>coda</b>?? quando aggiungo, aggiungo alla fine,<br> oppure inserisco la voce al primo elemento vuoto che incontro? -- Comment added by Users.MarcoEsposito on 26 Nov 2002 Alla fine. La rubrica non deve avere buchi. -- Comment Users.AndreaSterbini - 26 Nov 2002 ---- ---+++ no comment ... mi boccio da sola: ho passato mezza giornata a fare questa cosa: rubrica.cognome = nominativo.cognome ; ...incompatible type assignment con cognome ovviamente char e a bestemmiare xchè pensavo dipendesse da un passaggio errato delle strutture alla funzione *GRRR!* mi sa che è meglio se x oggi lascio stare -- Comment added by Users.LauraRavagli on 26 Nov 2002 ---- ---+++ ma le solite 6 righe che fine hanno fatto? -- Comment added by Users.LeonardoParisi on 26 Nov 2002 Ti mancano? -- Comment Users.AndreaSterbini - 26 Nov 2002 Si mi mancano...:) piu' che altro vorrei sapere se ci vanno messe o no.... ma da quanto ho capito no. -- Comment added by Users.LeonardoParisi on 26 Nov 2002 ---- ---+++ Mi manca qualcosa o il mio degrado mentale avanza? E' da stasera appena tornato a casa che provo a far funzionare<br> quella maledetta scanf per farle ricevere argomenti diversi,<br> o anche tutta la riga di input in alternativa, o perlomeno<br> bloccarsi quando premo "invio"...ora la domanda e' la seguente:<br> c'e' qualcosa sul funzionamento della scanf che chi non puo' <br> venire a lezione deve sapere o sono io che sono entrato in un loop<br> mentale cronico?? -- Comment added by Users.TizianoMorgia on 27 Nov 2002 La _scanf_ (come le sue sorelle _fscanf_ e _sscanf_) e' una brutta bestiaccia. Soprattutto, tratta gli errori in un modo molto poco intuitivo, come ho gia' avuto modo di spiegare a qualcuno, e se non si conosce bene il meccanismo ci si trova tranquillamente in un loop infinito. Se posso permettermi di darti un consiglio, assumi sempre che gli input siano di tipo corretto. -- Users.ArcangeloTripi - 27 Nov 2002 Il mio problema pero' e' il seguente: <verbatim> char pippo[400], paperino[200], pluto[200]; Scrivo --> Inserisco --> Ho scanf( "%s", pippo ); --> Pape Rino --> Pape scanf( "%s %s", paperino, pluto ); --> Pape Rino --> Pape Rino (Ok!) scanf( "%s %s", paperino, pluto ); --> Pape (invio) --> nella linea di comando va a capo! </verbatim> La domanda e' quindi: come faccio a fare in modo che la scanf "si fermi" quando premo invio anche se non ho "riempito/fornito" tutti i valori!? -- Comment added by Users.TizianoMorgia on 27 Nov 2002 _scanf_ considera come separatori di stringa sia il carattere blank che il ritorno a capo. Quindi, quando hai inserito Pape ed hai premuto invio ha letto la prima variabile, non ha ancora terminato la sua esecuzione, ed aspetta che tu inserisca un valore per la seconda variabile. Nel frattempo, puoi premere invio tutte le volte che vuoi, finche' non metti un carattere non considera iniziata la seconda stringa. Questa verra' poi letta normalmente. _scanf_ funziona cosi', che piaccia o no la storia e' questa. Ma in realta' ha in serbo ben altre delizie.... -- Users.ArcangeloTripi - 27 Nov 2002 Ok, come avevo immaginato/capito...ora devo solo trovare il modo per leggere un numero diverso di parametri a seconda del comando ovvero: <verbatim> add pippo pluto 01-01-1500 tel blablabla <-- n parametri prox 01-01 <-- m parametri n <> m come si puo notare :-) </verbatim> Io volevo cavarmela con una scanf singola, ma credo che dovro' "aggirare" il problema. Grazie comunque per avermi tolto qualche dubbio. -- Comment added by Users.TizianoMorgia on 27 Nov 2002 ---- ---+++ Il controllo Scusate ma per il controlo degli errori della data si intende un giorno che non esiste tipo il 35 oppure il 31 novembre e anche immagino se uno digita un mese numero 15 e un anno 2050...... credo che siano errori accettabili... ma spero solo questi! O anche se la data non e'numerica ovvero scrivo come mese gen ecc...? -- Comment added by Users.LeonardoParisi on 27 Nov 2002 ---- ---+++ librerie2 le librerie in questione sono la limits.h, la string.h e la errno.h si possono usare? -- Comment added by Users.CristianoMarra on 27 Nov 2002 ---- ---+++ segmentation fault sto facendo delle prove, ma non capisco perchè se in una struct in cui c' è il suo puntatore ed un char * , quando inizio a far ciclare la lista inserendo le stringhe, dopo la prima stringa nel momento che inserisco la seconda mi da segmentation fault, da cosa è dovuto? p.s.: premetto che ho provato anche a dargli subito una dimensione oppure ad inizializzarle con il tappo "\0" help :-( -- Comment added by Users.CristianoMarra on 27 Nov 2002 ---- ==char *== vuol dire 'puntatore ad un carattere' (o ad un array di caratteri ... ma non alloca la memoria necessaria a contenere i caratteri ... per quello devi usare l'allocazione statica (definisci un array di caratteri) oppure quella dinamica (usi malloc, ma poi ti devi ricordare di deallocare la memoria) -- Comment added by Users.AndreaSterbini on 27 Nov 2002 ---- ---++++ include e librerie ok per limits, string ed errno ... -- Comment added by Users.AndreaSterbini on 27 Nov 2002 ---- ---++++ scanf Le stringhe conteneti lo spazio vanno circondate da doppi apici (vedi testo dell'esercizio) La scanf (se mi ricordo bene) torna come risultato il numero di _direttive_ che sono state trovate nell'input. -- Comment added by Users.AndreaSterbini on 27 Nov 2002 Non vorrei fare il _pedantic_, ma _scanf_ restituisce il numero di input letti ed assegnati correttamente. -- Comment added by Users.ArcangeloTripi on 27 Nov 2002 Giusto. -- Users.AndreaSterbini - 27 Nov 2002 ---- ---+++ Nomi composti Professore dobbiamo gestire anche i nome complessi? Es: NOME: Gianni Maria Cognome: Pluto ?????????' -- Comment added by Users.MatteoLaBella on 27 Nov 2002 Certo, come scritto nel testo i nomi/cognomi con spazio saranno racchiusi da doppi apici. -- Comment added by Users.TizianoMorgia on 27 Nov 2002 E comunque basta dare un'occhiata agli esempi, uno dei quali tratta proprio questo caso! -- Comment added by Users.ArcangeloTripi on 27 Nov 2002 ---- ---+++ segmentation fault-la vendetta ho provato in tutte e due i modi non c'è niente da fare, ancora sta benedetta segmentation fault(e pensare che in C---++ c'è tanto quella bella classe String sigh :-( ) -- Comment added by Users.CristianoMarra on 27 Nov 2002 Non so se la cosa puo' esserti utile, io la butto li'. In fase di debugging, puoi controllare anche i valori dei puntatori prima di usarli, in modo da essere sicuri che puntino effettivamente dove ti aspetti. L'indicatore di conversione di _printf_ per le variabili puntatore e' %p. Comunque, tieni presente che, tanto per fare un esempio, il kernel di Linux e' scritto in C, non in C---++. Non vorrei sbagliarmi, ma l'impressione e' che in giro ci sia *molto* piu' codice scritto in C che in C++. La programmazione ad oggetti ha sicuramente dei vantaggi nel campo delle interfacce grafiche, e per alcuni tipi di database, ma l'impressione e' che in generale il gioco non valga la candela. -- Comment added by Users.ArcangeloTripi on 27 Nov 2002 ---- ---+++ sono ancora all'inizio... son stata out per un giorno per l'installazione del dual boot sul mio portatile..sgrunt... mTRANQUILLI!!! rieccomi :) prima domandina di approccio: si possono annidare le struct? ho visto di si.. ma in questo casa e' conveniente? mi riferisco alla data di nascita ed eventualmente all'email/telefono... -- Comment added by Users.ElisabettaDAiutolo on 27 Nov 2002 ---- Certo! L'esercizio è proprio sulle struct/enum/union annidate ... -- Comment added by Users.AndreaSterbini on 27 Nov 2002 ---- ed ora sono io a salutarvi x un pò (almeno di giorno) Il lavoro chiama... UFF! -- Comment added by Users.LauraRavagli on 27 Nov 2002 ---- ---+++ GRAZIE ARCANGELO <font color="blue">Ti ringrazio per la dritta, sul c---++ stavo scherzando, lo so che il kernel di linux è scritto in C (come quello di windows e dei MacOs), anzi ti dirò di più il 90 % è scritto in C l'altro 10 % è in assembly(la parte del master boot record di un OS solo così la puoi controllare e creare), anche se poi alla fin fine codice assembly si può scrivere anche nel codice(con la funzione asm(...) ) tenterò il tuo consiglio</font> -- Comment added by Users.CristianoMarra on 27 Nov 2002 ---- ---+++ Spazi Prof. ma nell'input delle linee di comando che inserira'(add Marco ...), lei separera' gli argomenti con un unico ed un solo spazio? -- Comment added by Users.MarcoEsposito on 27 Nov 2002 Il numero di spazi non dovrebbe essere un problema. Se lo fosse (fatemi sapere) darei un solo spazio. -- Comment added by Users.AndreaSterbini on 27 Nov 2002 ---- ---+++ "two or more data declarations" ... Ho provato a dichiarare la struct per la data in questo modo: <verbatim> struct data { int gg; int mm; int aa; } </verbatim> poi ho usato un ciclo for per inserire le date. Ma alla compilazione, il terminale mi "two ore more data declaration" Che vuol dire? -- Comment added by Users.DanieleComandini on 27 Nov 2002 che ci sono due dichiarazioni delle struct *data* ... controlla se l'hai ridefinita per sbaglio. -- Comment added by Users.AndreaSterbini on 27 Nov 2002 ---- ---+++ Del ma quando eseguo la DEL e ci sono piu` persone con lo stesso nome e cognome devo eliminarle entrambe o solo il primo che incontro???? -- Comment added by Users.EmanuelePiersanti on 27 Nov 2002 tutte (rileggi il testo) -- Comment added by Users.AndreaSterbini on 27 Nov 2002 ---- ---+++ Input c'é un modo per prendere come input su stdin un array di caratteri di lunghezza variabile? Ho provato con gets(char *s) ma si incavola subito e con altri metodi la situazione non cambia in quanto alla fine fanno la stessa chiamata al sistema...... cme si fa? -- Comment added by Users.LeonardoParisi on 27 Nov 2002 ---- ---++++ re: Input se intendi---+ o - meno quello che cercavo io qualche msg sopra,<br> no (o almeno non ci sono riuscito!). Se ci riesci fammi sapere! :-)<br> Cmq io ho risolto in questo modo: <verbatim> linea di comando: pippo pluto scanf( "%s", var1 ); /* ...codice... (non sono sicuro e non ti dovrebbe servire, ma io non farei nessun output nel codice tra le due scanf) */ scanf( "%s", var2 ); var1 <-- "pippo" var2 <-- "pluto" </verbatim> -- Comment added by Users.TizianoMorgia - 28 Nov 200 ---- ---+++ Controllo degli errori (facoltativo) Il controllo dovrebbe segnalare un errore se il dato: * non segue la sintassi data * non ha senso (ad esempio una email con due @ oppure una data inesistente) -- Comment added by Users.AndreaSterbini on 27 Nov 2002 ---- ---+++ Magica apparizione... In fase d'inserimento dei dati assegno il campo del tipo(cioè la parola email o tel) ad una variabile d'appoggio fittizia per non considerlo pero' nella stampa dei dati inseriti "magicamente" nel campo della data viene accodata l'email/telefono in questo modo: <verbatim> |........................Andrea|......................Sterbini|02-02- 1961sterbini@dsi.uniroma1NOSPAM.it|sterbini@dsi.uniroma1NOSPAM.it.... ................| </verbatim> Da cosa può dipendere????Cosa posso fare per non considerare quelle "maledette" :) parole Grazie... -- Comment added by Users.AndreaArtibani on 28 Nov 2002 ---- Non so se questo e' il caso, ma tieni presente che il C, quando si dichiara un vettore di una certa dimensione si limita a riservare lo spazio in memoria, ed in seguito non fara' alcun controllo sugli indici, che potranno anche uscire dai limiti dichiarati. Ad esempio, se dichiaro <verbatim> char stringa[100]; </verbatim> e nel programma scrivo qualcosa come <verbatim> stringa[200] = 'a'; </verbatim> lui non batte ciglio, si limita a 1)andare all'indirizzo di _stringa_ 2)spostarsi di 200 posizioni, ottenendo un nuovo indirizzo 3) in quell'indirizzo inserire il carattere 'a'. Le conseguenze dipendono da quale ruolo svolge l'indirizzo a cui si e' acceduto. Se si finisce in un'area al di fuori dei range di memoria virtuale che il sistema operativo aveva assegnato al programma, quest'ultimo (il sistema operativo) protesta in qualche modo, nel nostro caso dando luogo ad un messaggio del tipo "segmentation fault". Se invece quello spazio era stato riservato ad un'altra variabile del programma ecco che _opla'_, come per magia ci si trova un valore apparentemente inspiegabile per quella variabile. Questo e' C, non Visual Basic :) P.S. Questo comportamento non e' sbagliato, e' una caratteristica voluta del C. Le motivazioni di tutto cio' risulteranno chiare a chi sopravvivera' (metaforicamente parlando) P.P.S. Perche' non levi un po' di puntini dal tuo esempio? Senno' allarghi eccessivamente la pagina a tutti. Lo farei io, ma non tocco i messaggi degli altri. -- Comment added by Users.ArcangeloTripi on 28 Nov 2002 ---- Ho anche un'altra possibile spiegazione. Quando si chiede al C il valore di una stringa specificandogli la sua posizione di memoria, lui si comporta in questo modo: 1) va all'indirizzo indicato 2) si sposta di un carattere alla volta (per carita' di Dio, non consideriamo il caso dei caratteri multibyte!) fino a che non trova un terminatore di stringa, nel nostro caso il carattere '\0'. Se per qualche motivo questo carattere e' stato eliminato o sovrascritto nella mia stringa a lui non frega niente, va avanti finche' lo trova, anche se originariamente apparteneva ad un'altra stringa o ha raggiunto una posizione di memoria che lo conteneva casualmente. Anche questo puo' dare luogo ad effetti apparentementi magici (ma puo' essere anche usato per scrivere del codice piu' efficiente) -- Comment added by Users.ArcangeloTripi on 28 Nov 2002 ---- ---++++ scanf(2) Non ricordo esattamente la dicitura del libro, cmq se la memoria non mi inganna<br> se si vuole usare il formato %s per salvare una stringa di n caratteri, bisogna<br> associare un vettore di n---+1 elementi poiche' imposta l'ultimo al famoso '\0'.<br> Anche io ho fatto una cosa del genera ma a me veniva (sbagliando) cosi': <verbatim> char gg[2], mm[2], aa[4]; /*leggo data*/ ... /*stampo lettura*/ printf( "Giorno: %s", gg ); --> Output: 01012002 printf( "Mese: %s", mm ); --> Output: 012002 printf( "Anno: %s", aa ); --> Output: 2002 </verbatim> Soluzione: <verbatim> char gg[3], mm[3], aa[5]; </verbatim> la fortuna ha voluto che ho trovato un '\0' in memoria dopo anno e non ha scritto "altro"! -- Comment added by Users.TizianoMorgia on 28 Nov 2002 ---- ---+++ Domanda importante (aggiunta) Non ho capito bene, *la rubrica non deve avere buchi* si intende che gli elementi<br> della rubrica oltre che *continui* devono essere anche *contigui*??<br> O si intende che nella stampa non ci siano buchi?<br> Inoltre: aggiungendo alla fine bisogna "scalare" gli elementi precedenti per rispettare<br> l'ordine di inserimento? E per la cancellazione di un elemento? Bisogna *ricompattare* le schede? -- Comment added by Users.TizianoMorgia on 28 Nov 2002 ---- ---+++ Gruppi di scansione (scanf) Ho notato che sul libro ("Deitel & Deitel" "C Corso Completo ..."), che nella scanf si possono usare i <b>gruppi di scansione</b>, ed ho visto che possono essere <b>molto utili</b>, ma si possono usare tranquillamente? o creano problemi? -- Comment added by Users.MarcoEsposito on 28 Nov 2002 ---- ---+++ Domanda e Risposta la mia domanda è questa: con il comando "del" se si hanno più nomi e cognomi uguali, devono essere cancellati tutti, oppure, solo il primo che s'incontra? Risposta per Marco Esposito: Non penso che in questa circostanza servano a molto i gruppi di scansione, perchè grazie a questi, puoi prendere un ben preciso numero di caratteri e quindi, nel caso del nome, cognome, email o tel, non sapresti a quanto impostare gli n caratteri, avendo ciascun individuo bisogno di diverse quantità di n caratteri; In compenso, subito dopo, a pag 342 troverai molto interessante il "carattere di soppressione dell'assegnamento" utile, per gestire i "-" delle date (ma forse questo lo sapevi già). -- Comment added by Users.AndreaBandino on 28 Nov 2002 ---- ---+++ Dangerous Se provo a usare gets su gcc mi risponde cosi' : "the 'get' function is dangerous and should not be used" e non me lo vuole compilare... anche se su altri sistemi funziona perfettamente e cmq e' una funzione di C di libreria. che gli devo fare? -- Comment added by Users.LeonardoParisi on 28 Nov 2002 Effettivamente è vero! Mi hanno spiegato in laboratorio che tutti i compilatori di LINUX non accettano questa funzione.. se hai un problema per quanto riguarda la stringa con degli spazi, fai in questo modo <verbatim> scanf("%[^\n]", &nomevariabile) </verbatim> In questo modo prende tutti i caratteri, compresi gli spazi finche non dai il comando di invio!! -- Comment added by Users.MatteoLaBella on 28 Nov 2002 ---+++ scanf.... quando iserisco un comando es: add,il mio programma può andare a capo e chiedermi nome cognome ecc ecc...oppure deve farsì che io possa scrivere tutto su una stessa riga???? se deve scrivere tutto su una riga mi sorge un dubbio:la scanf come fa a riconoscere add,fine,print,del e prox e permettermi di scrivere tutto il resto senza andare accapo??? c'è un uso particolare della scanf che permette tutto ciò? ciao 0;) -- Comment added by Users.FabioQuarta on 28 Nov 2002 Devi compiere tutte le operazioni su UNA RIGA quindi sia comando che immissione.. la scanf funziona come la printf cioè ti permette di inserire più input in una sola riga ES: <verbatim> scanf("%s %s", &nomecomando, &input) </verbatim> In questo modo se scrivi ADD matteo saprai che ADD sta dentro alla variabile nomecomando (con una semplice IF te le cavi) e poi sai che in input ci va matteo L'esempio è solo con due ma se vuoi puoi mettere altre variabili.. ciao -- Comment added by Users.MatteoLaBella on 28 Nov 2002 --- ---- ---+++ Un consiglio Solo un consiglio... vedo che si gira intorno alla questione :-) I comandi e i dati personali vengono immagazzinati tramite una sola scanf? oppure tramite piu' scanf? In ogni modo mi potete dare qualche informazione(anche qualche dritta), magari anche dandomi(se ci sono) indicazioni su dove poterle trovare su Deitel&Deitel. Grazie. (mamma mia che mal di testa a scrivere con una casella di testo così larga!!! tra un po' devo adottare la risoluzione 8000X6000 :-)) -- Comment added by Users.DavideSammartino on 28 Nov 2002 ---- ---+++ INFORMAZIONE IMPORTANTE! si puo usare una switch x fare questo programma o nn è possibile? es. posso scrivere: <verbatim> char opzione[5]; scanf("%s", &opzione); switch (opzione) { case 'add': ........................ break; } </verbatim> è possibile? o c'è qualke altro modo x implementare la switch senza dover usare tutti quegli if? il prog risulterebbe anche---+ leggibile! o sbaglio? risp grazie! -- Comment added by Users.AndreaSantoro on 28 Nov 2002 ---- ---++++ switch ? l'istruzione *switch* prende come argomento un numero intero e tutte le seguenti istruzioni *case* devono avere valori *costanti* al momento della compilazione ... vedi tu se questo ti aiuta. -- Comment added by Users.AndreaSterbini on 28 Nov 2002 ---- allora nn posso usare la switch e devo fare tutta la serie di if! grazie prof! -- Comment added by Users.AndreaSantoro on 28 Nov 2002 ---- ---++++ Del e buchi ... * Del: In caso di omonimie vanno cancellati *tutte* le voci trovate. * Buchi: fate come vi pare, ma una nuova aggiunta va fatta *in fondo* (e NON nella prima voce vuota) -- Comment added by Users.AndreaSterbini on 28 Nov 2002 ---- ---+++ Quindi quindi la data 1982 é sbagliata sarebbe giusta 982 ...? controliamo pure se l'anno é bisestile? -- Comment added by Users.LeonardoParisi on 28 Nov 2002 Mi sono sbagliato a mettere solo 3 *a* nell'esercizio ... correggo subito. -- Users.AndreaSterbini - 30 Nov 2002 ---- a leo mi sa ke pure l'anno bisestile dobbiamo controllare! -- Comment added by Users.AndreaSantoro on 28 Nov 2002 ---- ---++++ Gestione degli errori ... Ragazzi ... non ho il tempo per rifiatare e mi volete far implementare anche il controllo dell'anno bisestile? ... ma mi avete preso per Stakanov? :-) Facciamo così: * gli errori di sintassi vanno controllati * tutti i mesi hanno 31 giorni * l'anno ha 12 mesi * l'anno ha 4 cifre (va da 0 a 9999) * un indirizzo email ha un solo '%RED%@%FINE%' ed almeno un '%RED%.%FINE%' (ed esempio xxxx%RED%@%FINE%yyyy%RED%.%FINE%zzz oppure uuuu%RED%@%FINE%ttt.rrr.eee%RED%.%FINE%www) ... se me ne sono sfuggiti di clamorosi ditelo ... -- Comment added by Users.AndreaSterbini on 28 Nov 2002 ---- ---++++ re: Gestione degli errori ... Grazie del chiarimento e della semplificazione :) -- Comment added by Users.LeonardoParisi on 29 Nov 2002 ---- ---+++ Scanf (prova Prof) Ho fatto un paio di prove con la scanf ... Come notato da altri, la direttiva %s va bene solo se il nome (o il cognome) non contengono spazi. Se invece li contengono dovete usare la direttiva %[] e ricordare che il nome (cognome) saranno circondati da doppi apici. -- Comment added by Users.AndreaSterbini on 28 Nov 2002 ---- ---+++ Scanf (testata dal prof) Professore ne è sicuro? mi puo fare un esempio? <verbatim> scanf("%[]", nomevar) ? </verbatim> Può andar bene? Se si, a me NON VA :( -- Comment added by Users.MatteoLaBella on 28 Nov 2002 ---- ---+++ Meglio gets() forse conviene usare gets() mi sono fatto un calcolo e contando gli spazzi al massimo la stringhe possono essere lunghe 180 caratteri. quindi se uno dichiara Char InLine[180] e poi esegue il gets(InLine) non si hanno problemi di sorta con le " o cose simili si ha tutta la linea.... basta fare poi un parsing su essa e gestirla nel modo opportuno a me mi pare piu'facile e sicuro cosi' -- Comment added by Users.LeonardoParisi on 29 Nov 2002 ---- ---+++ Scanf ... Possibile che non vi venga in mente di leggere il manuale di scanf? (fate ==man scanf==) La direttiva ==%[]== serve a raccogliere una sequenza di caratteri appartenenti all'elenco scritto tra le due parentesi (oppure NON appartenenti). Esempi: * %[abcd]: una sequenza di 1 o piú caratteri *a,b,c* o *d* (anche mescolati) * %[a-d]: la stessa cosa * %[^abcd]: una sequenza di caratteri *diversi* da a,b,c,d * %[^a-d]: la stessa cosa -- Comment added by Users.AndreaSterbini on 29 Nov 2002 ---- ---++++ re: Scanf ... Si l'ho letto ma mi piace piú l'idea di gets e di un bel parsing...... -- Comment added by Users.LeonardoParisi on 29 Nov 2002 ---++++ scanf e gets e sscanf allora puoi usare <verbatim> scanf("[^\n]",riga); </verbatim> per leggere tutta la riga (al posto della gets). Poi sei libero di parserti la stringa con *sscanf* -- Users.AndreaSterbini - 30 Nov 2002 ---- ---+++ Ordinamenti vari Mi sono accorto che gli ordinamenti da implementare per la versione facoltativa potrebbero ottenere risultati diversi se: * si ordina per nome ed esistono diverse persone con lo stesso nome * si ordina per cognome ed esistono diverse persone con lo stesso cognome * si ordina per mese-giorno ed esistono diverse persone nate nello stesso mese-giorno Per evitare che la correzione non funzioni sappiate che *nei test NON inseriró voci che possano portare a questi casi* -- Comment added by Users.AndreaSterbini on 29 Nov 2002 ---- ---+++ Nota... Salve prof., quindi(se ho capito bene!!!) mi conferma che la nota presente nel testo dell'esercizio:<br> <b>NOTA: è possibile aggiungere più schede con lo stesso nome e cognome</b><br> non e' piu' valida????Se si, vale anche per le date??? Grazie mille. -- Comment added by Users.AndreaArtibani on 29 Nov 2002 E' possibile ma io non le inserirò -- Users.AndreaSterbini - 30 Nov 2002 ---- ---+++ A nome di tutti La prego prof a nome di tutti è possibile allungare il tempo di consegna?? :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( -- Comment added by Users.CristianoMarra on 29 Nov 2002 ---- ---++++ re: A nome di tutti Non penso che sará d'accordo.... la vedo dura.... -- Comment added by Users.LeonardoParisi on 29 Nov 2002 ---- ---+++ slittamento della consegna? Mi rendo conto che soprattutto gli studenti del venerdì hanno meno tempo a disposizione tra la lezione (in cui posso dare parecchi chiarimenti) e la consegna. Per evitare di accavallare consegna e spiegazione della soluzione, posso far slittare la consegna di tutti i prossimi esercizi al al massimo alla notte di martedì. Voi, però, siete disposti a consegnare l'ultimo esercizio martedì 24 Dicembre? Preferite invece qualche giorno di più per programmare anche a Natale? :-) -- Comment added by Users.AndreaSterbini on 29 Nov 2002 ---- ---+++ Spostiamo a martedi !!!! Io ho perso due giorni per l'installazione del dual boot sul portatile... sono ancora al carissimo amico.... roba che una scanf di una stringa[5] predichiarata mi da se cerco di stampare il contenuto della variabile segmentatin faulT..PERCHE????? e sto ancora alla function di ADD.... a lei 24 ore non cambiano nulla.. e a me si.. non consegnare perche' incompleto mi dispiacerebbe.. su su.. le diamo tante soddisfazioni poi :) -- Comment added by Users.ElisabettaDAiutolo on 29 Nov 2002 OK -- Users.AndreaSterbini - 29 Nov 2002 ---- ---+++ parsing ... Potete usare la scanf anche per leggere tutta una riga: * ==scanf("%[^\n]",riga)== legge una sequenza di caratteri *diversi* da \n Ricordatevi che *riga* dev'essere abbastanza grande da accogliere tutti i caratteri letti e lo '\0' finale -- Comment added by Users.AndreaSterbini on 29 Nov 2002 ---- ---++++ re: parsing ... Si cosi'funzionerebbe solo che messo in un ciclo do-while o in for il prog si rincoglionisce in quanto legge la riga esegue il blocco di codice e quando priprova a re la scanf rilegge automanicamente dal stdin da solo sensa aspettare che gli venga dato un input e cosi' il prog va in un ciclo infinito..... ora non so se questo problema lo da solo a me o no.... -- Comment added by Users.LeonardoParisi on 29 Nov 2002 <verbatim> sscanf(riga,"testo da trovare con direttive per ricavare gli elementi",elemeno1, elemento2, elemento3); </verbatim> -- Users.AndreaSterbini - 30 Nov 2002 ---- ---+++ Sull' input Prof, scusi siccome ci sto poco forse (di tempo ma anche di testa :) ) o mi sono persa qualcosa oppure ho già la mia soluzione. circa l'input secondo me basta fare la scanf sul primo comando e poi differenziare le altre scanf in base a questo. Dormo o son desta? -- Comment added by Users.LauraRavagli on 29 Nov 2002 Non mi dai abbastanza dettagli da capire ... potresti aver ragione. -- Users.AndreaSterbini - 30 Nov 2002 ---- ---+++ Un consiglio Solo un consiglio... vedo che si gira intorno alla questione I comandi e i dati personali vengono immagazzinati tramite una sola scanf? oppure tramite piu' scanf? In ogni modo mi potete dare qualche informazione(anche qualche dritta), magari anche dandomi(se ci sono) indicazioni su dove poterle trovare su Deitel&Deitel. Grazie. (mamma mia che mal di testa a scrivere con una casella di testo così larga!!! tra un po' devo adottare la risoluzione 8000X6000 :-)) -- Comment added by Users.DavideSammartino on 29 Nov 2002 credo che con 1 o 2 scanf (o sscanf) si riesca a parsare tutto un comando. -- Users.AndreaSterbini - 30 Nov 2002 ---- ---+++ Errori.... Se quando controlliamo che l'email o la data o il tel sono giusti o no, e ci accorgiamo che é un errore.... che cosa dobiamo stampare o fare? -- Comment added by Users.LeonardoParisi on 29 Nov 2002 Leggi il testo dell'esercizio (la gestione degli errori è opzionale) -- Users.AndreaSterbini - 30 Nov 2002 ---- ---+++ Sort Compleanno Salve prof, vorrei sapere se con il comando sort compleanno, si devono stampare in ordine, le persone, seguendo solo il giorno ed il mese oppure, seguendo in ordine il giorno il mese e l'anno; cioè qual'è corretto tra i due esempi? sort compleanno nome cognome 12-01-1982 ...... nome cognome 01-12-1960 ...... oppure sort compleanno nome cognome 01-12-1960 ...... nome cognome 12-01-1982 ...... -- Comment added by Users.AndreaBandino on 29 Nov 2002 Leggi il testo, non bisogna stampare nulla, ma riordinare le voci in ordine crescente di: * mese * anno poi se eseguo il comando *print* le voci verranno stampate nell'ordine in cui sono nell'agenda (in questo caso in ordine di compleanno) -- Users.AndreaSterbini - 30 Nov 2002 ---- ---+++ Seri problemi con SCANF Ho seri problemi con la scanf.. anche la soluzione <verbatim> scanf("%[^\n]", nomevar) non mi va bene </verbatim> infatti se la metto dentro ad un ciclo, mi viene eseguita solo una volta.. come posso fare visto che gets mi dice che è pericolosa (dangerosa) per il PC? <strong>ATTENZIONE QUANDO USATE TWIKI, NON CANCELLATE LE DOMANDE POSTE PRIMA DI VOI!! </STRONG> -- Comment added by Users.MatteoLaBella on 29 Nov 2002 ---- ---+++ re: Meglio gets() La funzione gets(3) e` da evitare come la peste. Non effettua nessun tipo di controllo sul numero dei caratteri presi in input lasciando cosi` all' utente la possibilita` di andare a scrivere oltre i limiti del buffer. Uno dei principali attacchi informatici che minano la sicurezza del software scritto in C, il cosidetto "buffer overflow", si ottiene proprio sfruttando lacune messe a disposizione da funzioni come gets(3). Non c'e` da meravigliarsi quindi se alcuni compilatori (seri) si "rifiutano" di andare avanti. Se non ti va di usare scanf, potresti provare con fgets(3), es: fgets(stringa, 180, STDIN) mette dentro stringa *al massimo* 179 caratteri provenienti dallo standard input (l'ultimo viene posto automaticamente a '\0'). -- Comment added by Users.AlessandroCavagni on 29 Nov 2002 gets lasciatela stare. -- Users.AndreaSterbini - 30 Nov 2002 ---- ---++++ re:Meglio gets() Si puo usare anche gets() basta passagli per evitare casini appunto una variabile dichiareta come char nomevar[180]; in questa maniera si evitano problemi di buffer overflow -- Comment added by Users.LeonardoParisi on 30 Nov 2002 anche per la scanf dovete passare array di caratteri abbastanza grandi da contenere le stringhe lette ... state attenti! -- Users.AndreaSterbini - 30 Nov 2002 ---- ---+++ F1! F1! a me sembra che ci stiamo incasinando (o almeno io) un po troppo con l'input composto da nomi quali Pape Rino ..., per esempio: ==scanf("%[^\n]",riga)== legge una sequenza di caratteri *diversi* da \n quando si accorge che ha finito di leggere ? solo quando l'input è > della sua largezza? se sì se uno mette un input corto? il nome e cognome sono sempre contenuti tra " " o solo se sono composti? va be insomma come _cazzarola_ si prende sto input?? che la notte vi porti consiglio (e che voi lo portiate a me domani) -- Comment added by Laura on 01 Dicembre 2002 Se ne accorge dal carattere \n di fine riga i " servono per i nomi (cognomi) composti (i nomi semplici possono essere sia senza che con ") -- Users.AndreaSterbini - 30 Nov 2002 ---- ---++++ F1!F1! io mio é quello che ho scritto in re:Meglio gets()..... leggi tutta la riga e poi la gestisci come ti pare.. -- Comment added by Users.LeonardoParisi on 30 Nov 2002 ---- ---+++ Cmq avevo altro da chiedere 1) lei dice che quando uno fa add non deve metterlo nel primo libero ma accodarlo in fondo (vedi "Del e buchi") ma il mio dubbio é questo: se lei fa un paio di volte del di alcuni nome inseriti, si formano dei buchi. E seguendo le sue direttive quando lei poi continuerá a fare add la lista di 20 nomi risulterá piena anche se in realtá non lo é perche dei nomi sono stati concellati....... come ci dobbiamo comportare.....?? 2) ho fatto una chiamata alla funzione isdigit() che fa parte penso di ctype.h si puó usare? 3) se quando ha tempo mi risponde pure alla domanda "Errori.... " mi fa un piacere.... -- Comment added by Users.LeonardoParisi on 30 Nov 2002 1 compattate la agenda ad ogni *add* 1 credo di sì -- Users.AndreaSterbini - 30 Nov 2002 ---- ---+++ Input Scusi prof ma ho un grosso problema con l'input non riesco a gestire una volta che ho preso la riga, come la posso gestire? -- Comment added by Users.DomenicoBoiano on 30 Nov 2002 Usa *sscanf* . -- Users.AndreaSterbini - 30 Nov 2002 ---- ---+++ Re: Meglio gets() Ma nessuno di voi ha usato readline? -- Comment added by Users.SalvatoreFerrucci on 30 Nov 2002 ---- ---+++ algoritmo qualcuno è così gentile da scrivere l'algoritmo dell'homework??? grazie mille ciao a tutti... sto rimbambendo con questa rubrica!!!!!!!!!!!!!!!!!! -- Comment added by Users.FabioQuarta on 30 Nov 2002 Qualcuno vuol mandare la sua soluzione a Users.FabioQuarta che non sa risolvere l'esercizio? :-) (ma sei matto?) -- Users.AndreaSterbini - 30 Nov 2002 ---- ---+++ SCusate ma... Scusate ma su quanto per esempio ha detto Matteo, di usare scanf(%[^\n], &var), ma quando da input arriva un nome con spazi in mezzo, e quindi lo dobbiamo racchiudere tra apici o doppi apici, vengono registrati anche quelli, quindi come si può fare in modo che venga preso solo il nome? Diego -- Comment added by Users.DiegoPacifici on 30 Nov 2002 leggi meglio il manuale di *scanf* -- Users.AndreaSterbini - 30 Nov 2002 ---- ---+++ Sort Compleanno Salve prof, vorrei sapere se con il comando sort compleanno, si devono stampare in ordine, le persone, seguendo solo il giorno ed il mese oppure, seguendo in ordine il giorno il mese e l'anno; cioè qual'è corretto tra i due esempi? sort compleanno nome cognome 12-01-1982 ...... nome cognome 01-12-1960 ...... oppure sort compleanno nome cognome 01-12-1960 ...... nome cognome 12-01-1982 ...... -- Comment added by Users.AndreaBandino on 30 Nov 2002 ---- ---+++ Un aiutino.... Ho notato che molte persone hanno problemi con la scanf e non si fidano ad usare la gets,<br> ma allora ho pensato... ma perche' non fare io una funzione che legge una stringa???<br> Per quanto riguarda il mio canale(E-O) il prof. Tronci ha spiegato come farne una (getline),<br> la mettero' up al piu' presto (guardate gli appuntidel prof. Tronci su Twiki)... -- Comment added by Users.MarcoEsposito on 30 Nov 2002 ---++++ copiare? no grazie Non copiate che vi annullo il compito. -- Users.AndreaSterbini - 30 Nov 2002 ---- ---+++ Segmentation fault Nei precedenti programmi abbiamo preso l'input dalla riga di comando con char *arg[], ovvero un "vettore di stringhe", di conseguenza ho pensato di utilizzarlo nella scanf,ma quando vado a copiare le varie parti nella mia struct mi da sto segnale di errore maledetto! ho provato di tutto:strcpy,sprintf,=; esempio r[1].nome=input[1]; mi da errore!!!!!!!! :( come posso fare..dove sbaglio? -- Comment added by Users.DarioLatini on 30 Nov 2002 argv riceve le stringhe dalla riga di comando. i comandi invece *li devi leggere da stdin!* -- Users.AndreaSterbini - 30 Nov 2002 ---- ---+++ Perch'è non esiste string var? Mi chiedo, perchè in C non è possibile dichiarare una variabile di tipo stringa? in modo che prenda la stringa inserita senza problemi? Ho deciso! Questo homework lo lascio stare.. Chi mi vuole dare una mano a lezione? La mia email sta sull HP di TWiki.. VI PREGO -- Comment added by Users.MatteoLaBella on 30 Nov 2002 ---- ---+++ Enum e union Scusate, io devo definire la data di nascita solo ke non so bene se è giusto quello ke faccio. Il professore dice di usare enum per la data ma non ho capito bene come...ho visto l'esempio sul Deitel ma centra poco e niente e quindi ho pensato di usare la union con dentro giorno mese e anno, solo ke mi sorge un dubbio...in fase di print mi da la somma dei numeri ke metto? Li appiccita tutti e 3? Come faccio a far venire un output tipo quello dell'esempio con i trattini tra i vari numeri? -- Comment added by Users.DavidVulpetti on 01 Dec 2002 ---- ---- ---+++ Un aiuto per le righe di comando Se qualcuno potesse avere la pazienza di spiegarmi brevemente come usare i parametri argv e argc (es. l'esercizio 4 quando si faceva il controllo argv!=3),e magari anche cosa scrivere da prompt , per dare direttamente i parametri al programma ,gli sarei molto grato. Vi prego aiutatemi !!!!!!!!!!!!1 -- Comment added by Users.RuggeroTinaburri on 01 Dec 2002 ---- ---++++ string var Che vuol dire non esiste *string var* ... non ti va bene scrivere così? <verbatim> char nome[31]; </verbatim> -- Comment added by Users.AndreaSterbini on 01 Dec 2002 ---- ---++++ enum e union come fai a usare la union per la data? se fai così verrà usato *lo stesso spazio* per giorno, mese e anno... col risultato di saperne solo uno dei tre. Per la data casomai serve una struct (l'abbiamo fatto per esercizio a lezione!) La enum può servire per l'elenco dei giorni e per l'elenco dei mesi ... ma potete anche non usarla. -- Comment added by Users.AndreaSterbini on 01 Dec 2002 ---- ---++++ Un aiuto per le righe di comando Perchè non fai invece come è scritto nel testo dell'esercizio e *leggi i comandi da %BIGGEST%stdin%FINE%*? -- Comment added by Users.AndreaSterbini on 01 Dec 2002 ---- ---+++ Comando print Come devo gestire il comando print se la rubrica è vuota? Lo 0 davanti al prefisso ci deve stare solo se il prefisso è di 2 cifre (es.06 e non 0212)? Non riesco proprio a stampare il telefono in un campo di 50 caratteri. Inoltre la mia scanf non vuole proprio accettare nomi con spazi! (Penso che dovrei dirgli di accettare tutto quello che è compreso fra i doppi apici incluso lo spazio, ma non so come). Ringrazio chiunque può sfoltire la selva di dubbi che mi assale di fronte al programma che maledizione va ma non proprio come vuole il prof. -- Comment added by Users.GiovanniColombi on 01 Dec 2002 Se la rubrica è vuota non stampi nulla Per stampare qualcosa in un campo largo 50 caratteri devi usare i modificatori delle direttive di printf .... leggi il manuale. Per leggere stringhe con spazi guarda le risposte precedenti a proposito della scanf. -- Users.AndreaSterbini - 02 Dec 2002 ---- ---+++ re: Un Aiutino... e adesso come mi comporto.... quella funzione io l'ho usata.... <br> la devo togliere?? uffa... ;) -- Comment added by Users.MarcoEsposito on 01 Dec 2002 Visto che non l'hai fatta tu ... dresi che hai copiato ... a buon intenditor ... -- Users.AndreaSterbini - 02 Dec 2002 ---- ---+++ DOMANDA PER STERBINI E PER TUTTI GLI ISCRITTI AL CORSO DI PROGRAMMAZIONE So benissimo che questo spazio è riservato alle domande per l'esercizio 6 ma sto con l'acqua alla gola. Linux non ne vuole sapere di partire e quindi SAPETE UN SITO DA DOVE SCARICARE UNA VERSIONE EFFICIENTE DEL LINGUAGGIO C COMPRENSIVO DEL COMPILATORE E DEL DEBUGGER? Per favore aiutatemi sto diventando matto!!!!! -- Comment added by Users.DanieleComandini on 01 Dec 2002 Perchè non leggi le pagine del corso che suggeriscono di usare Cygwin o Dev-C---++ o Mingw? -- Users.AndreaSterbini - 02 Dec 2002 ---- Il sito che fa per te è http://www.linuxiso.org/ ma devi avere almeno un 'ADSL sennò ci metti un mese.... -- Comment added by Users.LorenzoLivi on 01 Dec 2002 ---- ---+++ Prof puo rispondere ad un paio di domande??? grazie 1) x la stampa devo usare come parola chiave "print" o "stampa"? 2) x la data se io inserisco 02-02-1961 in output è giusto avere 2-2-1961 ??? 3) x il telefono se inserisco il numero---+39-06-111111 posso avere in output +39-6-111111 ??? x risolvere questo problema e visto ke sul telefono nn si deve fare nessun controllo posso dichiarare char telefono[18]??? ciao a tutti! -- Comment added by Users.AndreaSantoro on 01 Dec 2002 Mi pareva di aver corretto il testo: *print* -- Users.AndreaSterbini - 02 Dec 2002 grazie professore ma ha risposto solo ad una delle 3 domande! vorra dire ke terrò i miei dubbi tutti per me! ---- ---+++ Risposta al prof. per STRING Quello che volevo dire era questo: in C per passare una stringa funziona in questo modo char var[3]= | C | I | A | O | quindi il numero 3 sta per le celle di memoria.. Secondo me sarebbe più comodo poter trattare anche le stringhe come unico elemento: char var[3]= | CIAO | | PIPPO | | CASA | | PLUTO | In questo modo il 3 significherebbe solo il numero di "righe" -- Comment added by Users.MatteoLaBella on 01 Dec 2002 ---- cioè char *stringhe[3]? oppure char stringhe[3][20]? -- Comment added by Users.LauraRavagli on 02 Dec 2002 Se scrivi ==char var[3]== stai devinendo un vettore di 3 caratteri , per cui sicuramente la parola "ciao" non c'entra. Se vuoi scrivere un vettore di stringhe puoi usare i due suggerimenti di Users.LauraRavagli -- Users.AndreaSterbini - 02 Dec 2002 ---- ---+++ oltre le due stringhe non ce la fa ho un problema grosso, per l'esercizio ho optato per la lista concatenata, i fatti mi hanno dato ragione facendo esperimenti sul nome e cognome con tutti i comandi: add del prox print sort; non mi sembrava neanche vero fino a che non ho scoperto una cosa moooolto brutta: poco poco si inserisce un altro elemento nella lista in fase di stampa non me lo visualizza e a questo punto penso che neanche me lo inserisce cosa posso fare? ho già provato con un' array di stringhe e niente(sto facendo la data), ho provato con tre interi e niente, ho provato con le enum e niente, anche con una sotto struttura, vi prego aiutooooooooo! -- Comment added by Users.CristianoMarra on 02 Dec 2002 Usa un array di struct ... (che vi ho detto a fare che si possono inserire solo 20 elementi?) -- Users.AndreaSterbini - 02 Dec 2002 Certo che pero' la gestione dinamica della memoria e' molto piu' bella (e direi _molto molto_ piu' difficile). Io ci tento, speriamo di riuscirci. -- Users.ArcangeloTripi - 02 Dec 2002 ---- ---+++ grazie per aver spostato la scadenza :) -- Comment added by Users.ElisabettaDAiutolo on 02 Dec 2002 ---- ---+++ scanf dannata >:-| qualcuno sa spiegarmi perche' la scanf mi funziona con i campi char ed int di una struttura e non per i campi struttura struttura intero? cerco di essere meno criptica: la scanf al "primo livello" ossia per il cognome mi funziona mentre quella al "secondolivello" non mi funziona tipo per la data di nascita typedef struct persona{ char nome[DIMNOME]; .... struct data nascita; -- Comment added by Users.ElisabettaDAiutolo on 02 Dec 2002 ---- gli passi l'indirizzo? &nominativo.datanascita.giorno -- Comment added by Users.LauraRavagli on 02 Dec 2002 Ti sei ricordata la '&' davanti al campo intero? -- Users.AndreaSterbini - 02 Dec 2002 ---- ---+++ Giustificare testo..... per giustificare il nominativo a destra bisogna metterci degli spazi davanti.. bene mi dico: se faccio n volte strcat(stringona,spazio); mi accodo lo sapzio n volte alla stringona... se metto la strcat dento un for per i che va da zero a n mi da segmentation fault.... perche'? -- Comment added by Users.ElisabettaDAiutolo on 02 Dec 2002 Guarda meglio i modificatori delle direttive della printf ... a giustificare le stringhe ci pensano loro. -- Users.AndreaSterbini - 02 Dec 2002 ---- ---+++ avrei altre domande da fare, basta ke questa volta risponde a tutte le domande e nn ad una sola come prima! GRAZIE! 1)nel comando "prox" <giorno> <mese> la stampa va effettuata subito o devo ridigitare il comando print??? 2)se io inserisco con "add" due personecon data di nascita uguale a: 11-10-1983 e 13-12-1983, se vado a cercare la data 10-09 il programma deve stampare tutte e 2 le persone inserite o solo la prima??? 3)nel comando "del" se dopo aver inserito una persona es. andrea santoro e vado a cancellare ciccio franco ke nn è presente, in otput il programma deve stamparmi solo andrea santoro o che la persona da cancellare nn è stata trovata xke nn presente?? risp e grazie ancora x il disturbo! -- Comment added by Users.AndreaSantoro on 02 Dec 2002 1 la prima che hai detto :-) (rileggiti il testo) 1 come fa a stamparle tutte e due se hanno mese-anno di nascita diverso? vanno stampate tutte le righe corrispondenti al giorno dato o al prossimo compleanno dopo il giorno dato (rileggiti il testo :-) ). 1 se nessuna voce corrisponde al nome da cancellare devi stampare *nessuna* (rileggiti il testo :-) ) -- Users.AndreaSterbini - 02 Dec 2002 ---- ---+++ data .... combatto con la data: dunque... la mia struct e' del tipo struct data { int giorno[2], mese[2], anno[4]; }; mentre la sscanf nella funzione di inserimento che prende il pasto lo stringone.... sscanf(rigaint,"%2d%c%2d%c%4d %s", &R[dim].nascita.giorno, trattinoint, &R[dim].nascita.mese, trattinoint, &R[dim].nascita.anno, scelta); sbaglio col trattino??? e' un char.... -- Comment added by Users.ElisabettaDAiutolo on 02 Dec 2002 ---- ---++++ data ... Non capisco a che ti servono due interi per il giorno, due per il mese e 4 per l'anno ... non sono mica caratteri ... Se non metti il trattino nella stringa di controllo il numero viene interpretato come numero negativo .... cambia il %c in un '-' -- Comment added by Users.AndreaSterbini on 02 Dec 2002 ---- ---+++ RE: data.... 1. xche' scrivi "int giorno[2]" e non "int giorno" e basta??<br> 2. Perche' "trattinoint"?? Se non vuoi salvare il carattere trattino al posto<br> di %c scrivi %*c, comunque il formato della data viene passato come:<br> gg-mm-aaaa e non viene citato un caso tipo gg/mm/aaaa. Nel secondo caso<br> io lo considero errato e infatti scrivo "%d-%d-%d". Spero di aver capito quello che ti serviva sapere... -- Comment added by Users.TizianoMorgia on 02 Dec 2002 ---- ---+++ printf... che dire.... sono senza parole... era molto piu' facile di quanto pensassi.. quando e' scontata una cosa la vedo sempre per ultima :(( grazie prof ! -- Comment added by Users.ElisabettaDAiutolo on 02 Dec 2002 ---- ---+++ ancora printf... se voglio stampare stringa dopo 83 caratteri faccio una cosa del genere: printf("%83s\n", stringa); ma se 83 ce l'ho in un int??? -- Comment added by Users.ElisabettaDAiutolo on 02 Dec 2002 ---- ---+++ invece della data il colore degli occho no??? Ebbene si mi sto impiccando sulla data...la struttura della data la ho cosi' modificata... struct data { int giorno, mese, anno; }; nella subroutine di inserimento... sscanf(rigaint,"%d-%d-%d %s", &R[dim].nascita.giorno, &R[dim].nascita.mese, &R[dim].nascita.anno, scelta); printf("%d-%d-%d %s", R[dim].nascita.giorno, R[dim].nascita.mese, R[dim].nascita.anno, scelta); in esecuzione come data mi viene: 1-0-22473635 il colore degli occhi era piu' semplice.. sgrunt -- Comment added by Users.ElisabettaDAiutolo on 02 Dec 2002 ---- ---+++ Una domenda ed una richiesta... Domanda: E'lecito usare la fflush()? Richiesta: Lei ci aveva chiesto, di farle presente se l'inserimento di più spazi tra gli argomenti della riga di comando(add etc...)ci potevano dar problemi. Beh, a me ne danno, quindi se potesse inserire un solo spazio tra gli argomenti quando testa il programma... Grazie -- Comment added by Users.FabianoFerrazza on 02 Dec 2002 ---- ---+++ oltre le due stringhe2:la vendetta fare una cosa come quella che mi ha detto lei significa ricominciare da capo e rendere vane tutte le ore che potevo impiegare per studiare altro, ho scelto la lista per il semplice motivo che la trovavo più flessibile di un' array di strutture :-) , anche perchè a questo punto potevo fare tranquillamente un' array di stringhe e gestivo i dati in base a quale pipe si trovavano, la mia domanda era questa: c'è un modo per far gestire più di 2 oggetti dentro una struttura inserita dentro una lista? p.s.: comunque la ringrazio lo stesso per il consiglio :-) buono studio a tutti -- Comment added by Users.CristianoMarra on 02 Dec 2002 ---- ---+++ Sscanf Non riesco ad usare la sscanf per prendere i nomi composti tra i doppi apici insieme alle altre parole contenute nella riga di cui fare il parsing... E il manuale non mi funziona su Cygwin... aiuto, davvero. -- Comment added by Users.DavideSammartino on 02 Dec 2002 ---- ---+++ telefono.... ma se lo trattassimo come stringa? che bisogno c'e' di averlo come int?? -- Comment added by Users.ElisabettaDAiutolo on 02 Dec 2002 ---- ---+++ Cerca data.... Sulla ricerca dei record per giorno-mese,in caso di esito negativo, non ho capito bene se:<br> Bisogna incrementare solo il giorno(e il mese se e' il 31) o incrementare sia il giorno che il mese comunque??? Bisogna cercare(e quindi incrementare) finche' non si trova un record??? E se la ricerca comunque da sempre esito negativo?? Grazie mille. -- Comment added by Users.AndreaArtibani on 02 Dec 2002 ---- ---+++ Sorting Ma nel sorting, il "case" deve essere ignorato oppure i caratteri devo essere "case sensitive"? questa domanda la faccio perche' ho notato che i caratteri maiuscoli sono minori dei minuscoli. 'A' < 'a' -- Comment added by Users.MarcoEsposito on 02 Dec 2002 ---- ---++++ sscanf e se le virgolette le mettessi fuori dalla direttiva %[], più o meno così? * =="add \"%[ a-zA-Z']\" ..." ---++++ telefono ... Infatti ... bisogna stare attenti al prefisso delle città (che inizia per 0) ---++++ cerca data il comando *prox* cerca il prossimo compleanno .... per fallire non dev'esserci nessuna voce nell'agenda. -- Comment added by Users.AndreaSterbini on 02 Dec 2002 ---- ---++++ Sorting Ignorare il case è più difficile che non ignorarlo ... Per ordinare basta usare l'insertionsort visto a lezione ... Oppure potete usare le funzioni di sort di sistema .... -- Comment added by Users.AndreaSterbini on 02 Dec 2002 ---- ---- ---+++ ancora stringona iniziale.... scanf("%[\"a-zA-Z'1-10 @^\n]",riga); non mi prende i nomi composti.. ci ho messo pure \ davanti ai doppi apici... -- Comment added by Users.ElisabettaDAiutolo on 02 Dec 2002 ---- ---+++ sono TUTTI interi Ebbene si mi sto impiccando sulla data...la struttura della data la ho cosi' modificata... struct data { int giorno, mese, anno; }; nella subroutine di inserimento... sscanf(rigaint,"%d-%d-%d %s", &R[dim].nascita.giorno, &R[dim].nascita.mese, &R[dim].nascita.anno, scelta); printf("%d-%d-%d %s", R[dim].nascita.giorno, R[dim].nascita.mese, R[dim].nascita.anno, scelta); in esecuzione il printf mi restituisce una cosa del genere: 1-0-22473635 -- Comment added by Users.ElisabettaDAiutolo on 02 Dec 2002 ---- ---+++ re: sono TUTTI interi cosa c'e' nella "rigaint"??? Perche' la sscanf a "occhio" (non ho nulla<br> per provarla) sembra giusta.... -- Comment added by Users.TizianoMorgia on 02 Dec 2002 ---- ---+++ re: re: sono TUTTI interi .. (corretta) add nome cognome data tel .tel. oppure con l'email.... la riga insomma che leggo fino al primo carriage return.... -- Comment added by Users.ElisabettaDAiutolo on 02 Dec 2002 ---- ---+++ Professor Sterbini, sceglie la prima, la seconda o la terza? Non sono ancora riuscito a capire quale di questi tre ordinamenti verra' considerato corretto <verbatim> andrea Armando leopoldo Luca andrea leopoldo Armando Luca Armando Luca andrea leopoldo </verbatim> E' possibile saperlo (come al solito, prima della chiusura dell'HW)? Grazie. -- Comment added by Users.ArcangeloTripi on 02 Dec 2002 ---- ---++++ re: io sceglierei la terza..... <verbatim> Armando Luca andrea leopoldo </verbatim> -- Comment added by Users.LeonardoParisi on 02 Dec 2002 ---- ---+++ re(2): sono TUTTI interi ogni elemento della stringa (un elemento e' diviso dagli spazi) deve avere una<br> referenza nella stringa di formato della scanf (o sscanf). Quindi se dentro rigaint<br>hai tutti quegli elementi, la sscanf legge da sinistra e prova<br> (almeno credo) a mettere nel primo intero "add", nel secondo "nome", nel terzo "cognome".<br> In piu' non trova i trattini e quindi ti da un po' di problemi.... -- Comment added by Users.TizianoMorgia on 02 Dec 2002 ---- ---++++ ancora stringona iniziale.... Perchè non usi la versione %[^\n] per leggere la tringa fino al \n ... ... e poi %[a-zA-Z '] per leggere i nomi? (messa tra due " che devono essere presenti nell'input ...) -- Comment added by Users.AndreaSterbini on 02 Dec 2002 ---- ---++++ Ordinamento ... Quello che deriva immediatamente dall'ordine dei codici ASCII ... ovvero quello che si deduce confrontando due caratteri come abbiamo fatto a lezione ... ovvero il più facile :-) _[ma pensate che mi diverta a farvi impazzire? siete masochisti? :-) ]_ -- Comment added by Users.AndreaSterbini on 02 Dec 2002 Quindi <verbatim> Armando Luca andrea leopoldo </verbatim> che e' anche quello che si ottiene usando, ad esempio, strcmp. Masochista credo proprio di esserlo, visto che ho deciso di implementare la gestione dinamica della memoria. -- Users.ArcangeloTripi - 02 Dec 2002 ---- ---++++ re(3): sono TUTTI interi Tiziano, non è come dici tu. La scanf esamina l'input controllando che vi appaiano: * i caratteri del parametro di formato * quando si arriva ad una direttiva (p.es. %d) viene cercato quel tipo di input. Quindi la stringa di formato "add %s %s %d-%d-%d email %s" cerca di trovare: * %RED%add <stringa senza spazi> <stringa senza spazi> <intero>-<intero>-<intero> email <stringa senza spazi>%FINE% * A seconda di quale punto riesce ad arrivare la scanf torne *il numero di parametri che ha valorizzato* * quindi, nell'esempio se si ottiene 6 vuol dire che tutta la stringa è stata letta correttamente -- Comment added by Users.AndreaSterbini on 02 Dec 2002 ---- ---+++ Ancora su Scanf e sscanf C'e' qualcuno così gentile da farmi capire come si usano? Io con una scanf mi prendo tutta la riga di comando, poi? queste sscanf come si usano? c'ho provato ma non ci riesco...AIUTO Io ho in RIGA = "add "Paolo Paolino" Rossi 12-01-1980 tel---+39-06-56546849", se ad esempio volessi prendere "Paolo Paolino" come debbo fare? AIUTO!!! -- Comment added by Users.DavideSammartino on 02 Dec 2002 ---- ---+++ Maledetta gestione dinamica! Il mio codice mi da un grosso problema che ho casualmente (e drammaticamente) scoperto oggi: se nella mia rubrica sono presenti 2 voci e faccio del sulla prima si impalla! In tutti gli altri casi (0, 1, 3,...1000! voci) è ok. Non riesco a capire a cosa sia dovuto! E' davvero strano. -- Comment added by Users.GiovanniColombi on 02 Dec 2002 ---- ---+++ Sort... ma come si fa a distiguere la chiamata a sort tra quella del nome e quella del cognome? Una sará "sort nome pippo" e l'altra "sort cognome pappo"... oppure in un altra maniera? -- Comment added by Users.LeonardoParisi on 02 Dec 2002 ---- ---+++ Quali controlli sull'e-mail? Immagino che oltre ai controlli sull'e-mail indicati nel testo, se ne debbano prevedere anche altri, perlomeno che non siano contenuti due caratteri'@', che non ci siano due punti non separati da almeno un carattere, che l'indirizzo non termini con un punto, e che invece sia permesso di avere piu' di un punto. Bisogna anche tenere conto del fatto che i domini di primo livello (la stringa che segue l'ultimo punto, come "it" o "com") sono sempre composti di due o tre caratteri? (almeno cosi' mi pare, non vorrei sbagliarmi) E' possibile chiarire quali di questi controlli vanno implementati esplicitamente? -- Users.ArcangeloTripi - 02 Dec 2002 ---- Anche di 4 caratteri :P (vedi .info) e presto anche di piu' :( DANNATO ICANN!!! <br>Concordo con te Arcangelo, sarebbe utile una lista dei possibili errori (magari anche per il numero di telefono) o quantomento i piu' grossolani, perche' se ci mettiamo di impegno ne possiamo pensare migliaia :P poi professore come ha visto siamo molto fantasiosi !! -- Comment added by Users.MauroFerrara on 02 Dec 2002 ---- ---++++ Sort ... i comandi *sort XXX* mica prendono un parametro ... ordinano tutta l'agenda in base al campo desiderato ... Suggerisco di usare la funzione di libreria *qsort* che vuole come argomenti: 1 array da ordinare 2 numero di elementi dell'array 3 dimensione di un elemento in bytes (usate *sizeof*) 4 il nome di una funzione definita da voi: * con questo prototipo: ==int miosort(void * x, void * y)== * *x* ed *y* sono puntatori a due elementi da confrontare (voi fatene il cast al tipo della vostra struct per poterne usare i campi nella funzione) * dovete far ritornare un intero: * negativo se volete che *x<y* * 0 se li considerate uguali * positivo se volete che *x>y* E' chiaro che se volete implementare tutti e 3 i *sort* dovrete definire 3 funzioni -- Comment added by Users.AndreaSterbini on 02 Dec 2002 ---- ---++++ quali controlli? * date: <fino a 2 cifre>-<fino a 2 cifre>-<fino a 4 cifre> * telefoni:---+<fino a 3 cifre che non iniziano per 0>-<fino a 5 cifre che possono iniziare per 0>-<fino a 10 cifre che non iniziano per 0> * email:---+<caratteri senza spazio e @>@<caratteri senza spazio e @><punto><caratteri senza spazio, punto e @> * lasciamo stare i controlli sul tld o sulla distanza tra i punti ... -- Comment added by Users.AndreaSterbini on 02 Dec 2002 ---- ---++++ Ancora su Scanf e sscanf dovresti usare: <verbatim> char nome[31] = {0}; char cognome[31] = {0}; char riga[] = "add \"Paolo Paolino\" Rossi 12-01-1980 tel---+39-06-56546849"; sscanf(riga,"add \"%[^\"\n]\" %s ...",nome,cognome); </verbatim> -- Comment added by Users.AndreaSterbini on 03 Dec 2002 ---- ---+++ Domanda Ma prendo invece per scontato che i comandi add email sort ecc... siano scritti nel modo giusto e che non posso capitare cose del genere emailPippo@38.com oppure addd ecc.... ? -- Comment added by Users.LeonardoParisi on 03 Dec 2002 Devi individuare gli errori solo se svolgi la parte facoltativa. -- Comment added by Users.AndreaSterbini on 03 Dec 2002 ---- ---+++ esempio errato sulle specifiche del programma lei ha detto: email/telefono questa parte della voce può contenere in alternativa: l'indirizzo email (una stringa di max 50 caratteri) altrimenti il numero di telefono diviso in: prefisso internazionale (max 3 cifre) prefisso (max 5 cifre) numero (max 10 cifre) come mai invece in output comunque alla fin fine la pipe del tel compare allo stesso punto dell' output dell' email? quindi anch'esso deve finire a 50? -- Comment added by Users.CristianoMarra on 03 Dec 2002 email e telefono sono *in alternativa* e quindi debbono essere stampati nello stessa colonna. -- Comment added by Users.AndreaSterbini on 03 Dec 2002 ---- ---+++ Perdita zeri... Ho difficolta' sulla conversione del numero di tel in interi, infatti (logicamente!!!) perdo gli zeri iniziali!!! Ogni suggerimento e' ben accetto, grazie mille. -- Comment added by Users.AndreaArtibani on 03 Dec 2002 Io li ho trattati come stringhe, non ho trovato nessun valido motivo per trasformarli in numeri -- Users.ArcangeloTripi - 03 Dec 2002 Solo per il prefisso della città -- Comment added by Users.AndreaSterbini on 03 Dec 2002 ---- ---+++ Inserimento quando c'e' l'inserimento... si deve uscire solo se la rubrica e' piena? al primo inserimento se ne inseriscono 20 subito? -- Comment added by Users.ElisabettaDAiutolo on 03 Dec 2002 L'inserimento avviene comunque una riga per volta. La cosa che mi pare piu' logica e' che se ci sono gia' venti elementi in agenda e ne voglio aggiungere un altro, mi stampa "piena" (come da specifica) e torna ad aspettare un altro comando (che potrebbe essere anche un "del"). Nelle specifiche non e' detto che deve uscire. -- Users.ArcangeloTripi - 03 Dec 2002 Esatto -- Comment added by Users.AndreaSterbini on 03 Dec 2002 ---- ---+++ Come vengono effettuate le correzioni automatiche? x Sterbini Ho realizzato una soluzione dell'homework che, prendendo le linee dell'esempio da tastiera, si comporta esattamente come indicato. Se pero' gli stessi comandi li inserisco in un file ed effettuo la redirezione dello stdin, con <verbatim> ./hw6 <in.txt >out.txt </verbatim> continua a funzionare correttamente solo si aggiunge nell'ultima linea un comando "fine", altrimenti entra in un loop infinito. Spero che nelle correzioni automatiche venga inserito un'uscita finale. -- Comment added by Users.ArcangeloTripi on 03 Dec 2002 Certo -- Comment added by Users.AndreaSterbini on 03 Dec 2002 ---- E' normale credo, se non metti il comando "fine" il programma non ha condizione di uscita... quindi semplicemente rimane in esecuzione :) -- Comment added by Users.MauroFerrara on 03 Dec 2002 Quello che mi succede non e' proprio normale. Il programma non si limita a rimanere in esecuzione, continua a sparare in out.txt gli ultimi due record. In pochi secondi out.txt e' arrivato a 4 MB. Invece, in modalita' interattiva resta semplicemente in attesa di un input. Se invece l'ultima riga contiene il comando "fine", tutto va regolarmente. Comunque, a me pare del tutto ragionevole che alla fine si fermi l'esecuzione del programma con un bel "fine", appunto. -- Comment added by Users.ArcangeloTripi on 03 Dec 2002 ---- ---+++ Motivo valido... Non ho trovato neanch'io un motivo valido per trasformare il tel in num, forse il motivo valido è che nel testo dell'esercizio è implicitamente specificato!!! :) Quindi che fare??? -- Comment added by Users.AndreaArtibani on 03 Dec 2002 Premesso che, come sempre, ognuno alla fine fa come gli pare, e nessuno si prende responsabilita' per le scelte degli altri, credo che si debba ragionare in termini di quello che e' chiesto _esplicitamente_ nelle specifiche, e degli output attesi. Se rispetto le specifiche e ottengo l'output atteso, che problema c'e'? -- Comment added by Users.ArcangeloTripi on 03 Dec 2002 Nessuno vi ha *chiesto* di usare interi ... :-) -- Comment added by Users.AndreaSterbini on 03 Dec 2002 ---- ---+++ Scanf la scanf funziona una sola volta... ossia la seconda volta prende lo stesso input della prima.. pur avendo pulito i buffer fflus stdin oppure anche con fflush null... mi arrendo.... basta -- Comment added by Users.ElisabettaDAiutolo on 03 Dec 2002 Hai "consumato" il carattere \n per passare alla riga seguente? Non ti arrendere!!! -- Comment added by Users.AndreaSterbini on 03 Dec 2002 ---- ---+++ Qualcuno....... Qualcuno mi spiega meglio gli errori che ci possono essere sull'email? Che non l'ho capito da come l'ha detto il prof sopra.... grazie -- Comment added by Users.LeonardoParisi on 03 Dec 2002 basta che tu controlli che l'email contenga un solo '@' nessuno spazio e almeno un punto a destra dello '@' -- Comment added by Users.AndreaSterbini on 03 Dec 2002 ---- ---+++ SCUSATE ULTIMO DUBBIO! Bisogna fare qualke controllo sul telefono? nn mi sembra ke sia scritto nel testo dell'esercizio! cmq sia io l'ho dichiarato tutto il telefono char! -- Comment added by Users.AndreaSantoro on 03 Dec 2002 guarda sulla domanda Quali controlli uff.. niente sort 10 minuti sono proprio pochi! che qualcuno mi spedisce la Qsort (velocemente) ? :D Al prox Homework Seven! ciao laura ---- ---+++ Che bello :) Allora so giá che dei test non li supereró in quanto la parte di sort sotto win98 di m**** funziona mentre sotto linux no..... maledetto bill........ e con il sort non funziona manco una parte di prox......ora io con chi me la devo prendere con bill con me o con linux o con tutti quelli geniacci del cavolo che non sanno fare un cavolo di ansi C uguale su tutte le piattaforme!!!!! aaahhhhhhhhhhhhhh......... ok basta mi sono sfogato.... cmq prof quando arrivano i risultati del Hwork4?! -- Comment added by Users.LeonardoParisi on 03 Dec 2002 ---- ---+++ E dopo cosa ci aspetta? Spero solo che l'argomento del prossimo homework non sia "Riscrivete il kernel di Linux"... <img src="/pub/Users/ArcangeloTripi/4.gif" ><img src="/pub/Users/ArcangeloTripi/3.gif" > -- Comment added by Users.ArcangeloTripi on 04 Dec 2002 ---- ecco la mia soluzione: printf("il kernel di Linux\n"); :) -- Comment added by Users.LauraRavagli on 04 Dec 2002 ---- ---+++ Speriamo che arrivi presto... ...l'hw7. Per fare questo, e non sono sicurissimo del funzionamento visto che<br> non ho potuto fare troppi test per esaurimento del tempo disponibile, ci ho messo<br> un po' pero' ho imparato molte cose (spero!).<br> Ringrazio il prof. per la correzione sul funzionamento della scanf (e mi scuso con<br> Elisabetta per averle fornito informazioni sbagliate) e ringrazio<br> Arcangelo che mi ha tirato fuori dall'autunnale torpore esponendo(e inplicitamente<br> suggerendomi) di effettuare i test con il buon vecchio file di testo (fino a quel<br> momento andavo "a mano"...) :-) -- Comment added by Users.TizianoMorgia on 04 Dec 2002 ---- ---+++ Mi sono arresa... SI ! :( sono stata fino alle 23 ieri sera a fare prove con questa maledetta scanf nel main ho provato sia cosi' main() { char riga[MAXLEN]; while(1) { scanf("%[^\n]\n",riga); che cosi'.. scanf("%[^\n]",riga); NON ESCE !! rimane appesa.... santi argv e arg...... -- Comment added by Users.ElisabettaDAiutolo on 04 Dec 2002 ---- Ciao Elisabetta, credo che il tuo problema sia che non scarichi STDIN, quindi rimane memorizzata l'ultima riga che hai fornito :\ ... alcune delle possibili soluzioni potrebbero essere: fflush(FILE *stream) che pero' sembra avere problemi con linux, alternativamente c'e' gets( char *buffer ) che pero' warna alla compilazione e poi fgets(char *string, int n, FILE *stream) che sembra assolvere il suo dovere... Mi dispiace averti potuto rispondere solo oggi :( -- Comment added by Users.MauroFerrara on 04 Dec 2002 ---- scusa eli, io non ho usato la scanf perchè la discussione andava troppo per le lunghe, però credo che la tua scanf sia una specie di "non accettare il ritorno a capo" (che poi credo ancora che sia giusto così: scanf("%[^\\n]",riga);) è normale che rimane appesa , perchè non sa quando deve uscire visto che lo \n non lo considera -- Comment added by Users.LauraRavagli on 04 Dec 2002 ---- ---+++ Proroga Avete consegnato veramente in pochi (57) ... per cui credo sia giusto darvi una proroga fino a venerdì. ---+++ scanf Il problema è che ti rimane il carattere \n nell'input. Ti conviene usare (dalla seconda scanf in poi) ==scanf("\n%[^\n]",riga);== -- Comment added by Users.AndreaSterbini on 04 Dec 2002 ---- ---+++ scanf ..the last... quando ho detto che rimane appesa sono stat imprecisa... la successiva scanf mi prendeva il buffer della prima... (la scanf deve rimanere appesa).... ho provato con fflush(stdin) e con fflush(NULL)... poi vari mem set.. non credete che non ci abbia dedicato tempo.. non e' nel mio carattere vi assicuro... la delusione e' enorme ma non per il compito quanto per me... potevo usare altri 10.00 modi.. ma se si deve familiare con la struct, union e enum.... mi attengo... tutto qui.. scusate lo sfogo.. ho preferito non consegnare... pero' volevo testare a modo le functions a cui hoi dedicato maggior parte del mio we.... -- Comment added by Users.ElisabettaDAiutolo on 04 Dec 2002 ---- ---+++ continuo allora... all'inizio facio una SCANF per acquisire lo stringone.... while(1) { fflush(stdin); scanf("%[^\n]\n",riga); poi eseguo successive SSCANF dello stringone da cui prendo le variabili... sscanf(riga,"\n%s",comando); mi succede che devo dare due volte il comando affiche' venga eseguito.... -- Comment added by Users.ElisabettaDAiutolo on 04 Dec 2002 ---- prova a scrivere: <verbatim> scanf("%[^\n]",riga); // prima riga while(1) { // processa le righe scanf("\n%[^\n]",riga); // leggi le prossime } </verbatim> -- Comment added by Users.AndreaSterbini on 04 Dec 2002 ---- ---+++ Homework Glasnost (semi-OT) Visto che per risolvere questo hw (e molto probabilmente anche per i successivi)<br> si possono applicare moltissime soluzioni, per la scadenza del 6 e' possibile<br> aggiungere un check per autorizzare la pubblicazione del proprio esercizio?<br> Alcuni gia' li pubblicano sulla propria homepage, ma cercare in tutti gli user<br> diventa un'operazione abbastanza lunga...<br> PS: io da parte mia non li ho ancora pubblicati sulla mia hp sia perche' aspettavo<br> il famoso check sia per una questione di tempo (che cerco di recuperare in tutti i modi! :-)).<br> Cmq appena posso li pubblichero'...sempre che interessino a qualcuno! :-)<br> PPS: ci pensavo ora, se non si fa in tempo ad aggiungere il check si potrebbe<br> creare una pagina con la lista di chi pubblica i propri esercizi sulla propria hp?<br> Cosi chi vuole edita la pagina e si aggiunge alla lista. -- Comment added by Users.TizianoMorgia on 04 Dec 2002 ---- ---+++ Perche' cosi' pochi? Voglio azzardare una risposta alla domanda posta nella pagina di Programmazione 1, ed e' una risposta molto semplice: questi esercizi mi sembrano un po' troppo difficili per dei principianti, (e diventano sempre piu' difficili) e l'ultimo in particolare era davvero impegnativo. Parlo per me, anche se sono una matricola ho gia' una certa esperienza, a torto o ragione non mi considero un principiante, ma l'ultimo esercizio mi ha richiesto quasi quattro giorni a tempo pieno per essere risolto (lunedi' mi sono ritrovato a programmare fino alle tre e mezzo di notte), e non ho avuto nemmeno tempo per metterlo in bella copia o per effettuare dei test approfonditi (e per fortuna la mia esperienza mi aveva permesso di fiutare la faccenda, e di partire con il necessario anticipo). E' vero che ho scelto una soluzione piu' difficile di quella che impiegava un array di strutture, ma ripeto che secondo me questo homework era troppo difficile. E, se posso permettermi di formulare un giudizio, e' un peccato, perche' il meccanismo degli homework, unito a twiki, per il resto e' molto ben congegnato, e riesce a catturare l'attenzione. La mia domanda scherzosa piu' sopra sottintendeva proprio questo. Mi scuso con Sterbini se mi sono permesso di formulare dei giudizi, ma l'ho fatto con buone intenzioni. -- Comment added by Users.ArcangeloTripi on 04 Dec 2002 ---- ---+++ COME SARA LA PROVA SCRITTA DI PROGRAMMAZIONE??? chissa che esercizio dovremmo fare per la prova scritta di programmazione! ci vuole minimo una settimana per risolvere e nn del tutto gli homework del prof! avremo anke li tutto questo tempo x la consegna? nn abbiamo mica solo programmazione come esame!ma anche ARCHITETTURA, LOGICA E CALCOLO DIFFERENZIALE! che nn mi sembrano per niente facili! alla fine qualkuno dovremmo abbandonarlo e farlo---+ in la! e poi stiamo solo al 1 anno e mi sembra di aver iniziato gia a correre senza aver mai camminato! speriamo bene x i prossimi esercizi! CMQ VADA RIPETO KE NN ESISTE SOLO PROGRAMMAZIONE! CI SONO ANCHE ALTRE MATERIE! O SI FA L`UNA O SI FANNO LE ALTRE! e sentendo le voci di corridoio la gente adesso sta lasciando programmazione xke impiega troppo tempo a fare gli esercizi, cosa ke noi non abbiamo! oltre ad imaparare ci sono anche altri interessi! scusa prof del mio sfogo! era una cosa ke volevo dire! ciao -- Comment added by Users.AndreaSantoro on 04 Dec 2002 ---- ---+++ per andrea santoro tra le materie che hai nominato ti sei scordato anche lingua inglese -- Comment added by Users.CristianoMarra on 04 Dec 2002 ---- ---+++ ci sono anch'io ! D'accordo con Arcangelo, non faccio molto testo perchè non seguo e quindi molte cose mi risultano---+ difficili da capire (tipo fflush(stdin); chi l'aveva mai sentito??) non conosco il C ma sono abituata a programmare e quindi posso riuscire a gestire meglio gli esercizi con i relativi test che devono superare. però ci metto anch'io talmente tanto a fare gli homework che il libro non l'ho praticamente aperto ( e mi ritrovo a scrivere - compilare - correggere in un loop infinito e per niente educativo). Credo che ogni esercizio dovrebbe avere una sola problematica per volta, in modo da capirla e poterne discutere. -- Comment added by Users.LauraRavagli on 04 Dec 2002 ---- ---++++ HomeworkGlasnostPoll ... Mi piace l'idea di lasciare completamente libera la pubblicazione dei propri esercizi (il che risolve anche la questione della privacy perchè potete pubblicare gli esercizi dopo aver tolto i vostri dati) ... Ecco pronta la pagina: HomeworkDegliStudenti -- Comment added by Users.AndreaSterbini on 04 Dec 2002 ---- ---+++ Difficoltà degli esercizi ... OK, è chiaro che ho chiesto troppo (e me ne scuso). Ho una proposta: per riuscire a fare un esercizio sulle liste linkate ed uno sugli alberi, vogliamo distribuire i prossimi 2 o 3 esercizi su un periodi di tempo più lungo? (arrivando se necessario fino a befana?) Io farei in modo di seguirvi usando twiki. -- Comment added by Users.AndreaSterbini on 04 Dec 2002 ---- ---++++ Re: Difficoltà degli esercizi ... Grazie :) !!! Anche io ho avuto problemi a risolvere gli esercizi, pur avendo accumulato un'esperienza nel campo della programmazione modesta in termini di tempo, seppur amatoriale. Infatti del 6 non sono riuscito a fare il sort della parte facoltativa proprio per mancanza di tempo, ero quasi giunto alla soluzione e la mezzanotte era passata da poco :( ... Colgo l'occasione per chiedere se posso ri-consegnare l'esercizio comprensivo di tutta la parte facoltativa entro il nuovo termine di consegna ... -- Comment added by Users.MauroFerrara on 04 Dec 2002 ---- ---+++ Davvero? Ma che davvero c'è anche inglese? Cos'è? :) Cmq professore mi sa che non è che vengono chiesti tempi più lunghi da quello che ho capito, ma esercizi un po più facilini perchè molta gente fino ad ora non ha mai usato neanche un linguaggio di programmazione, tipo me :) -- Comment added by Users.DavidVulpetti on 04 Dec 2002 ---- ---+++ Ri-consegnare Dato che i termini di consegna sono stati etesi potete estendere e ri-consegnare il vostro esercizio -- Comment added by Users.AndreaSterbini on 05 Dec 2002 ---- ---+++ Esercizi più facili ... Beh, la facilità di un esercizio dipende anche dal tempo che si ha a disposizione per svolgerlo ... :-) A parte scherzi ... cercherò di darvi un esercizio più facile. (anche se vorrei cercare di farvi usare una lista ed un albero, prima di finire il corso ...) Ricordatevi, però, che le versioni facoltative sono ... facoltative! :-) -- Comment added by Users.AndreaSterbini on 05 Dec 2002 ---- ---+++ Dico la mia ! :) il tempo? considerando che lavoro, che seguo tre corsi, che ho una famiglia da mandare aventi e che devo stare attenta al bersaglio mobile il tempo non mi basta mai... Vorrei sottolineare un concetto in cui credo fermamente: se lo scopo di questi HW e' sviscerare e conoscere argomenti specifici sono disposta a continuare a farci mezzanotte tutti i giorni... ma se lo scopo e' superarli.. invece di questa str@@@ di scanf uso fgets e consegno stasera stessa.... altro suggerimento corretto e' allungare sicuramente i tempi.. ossia gli intervalli tra un compito e l'altro.. io rosico a non consegnare e a non fare un programma nel massimo delle mie possibilita'... ecco... ma oltre a tutto il resto e lavoro anche gli esoneri di logica pending... insomma! -- Comment added by Users.ElisabettaDAiutolo on 05 Dec 2002 ---- ---++++ ... lo scopo degli esercizi Effettivamente lo scopo degli esercizi è di farvi imparare cercando di svolgere qualcosa che sia anche un pochino interessante. Mi viene spontaneo di darvi esercizi che coprano un paio di argomenti per volta (per esempio scanf e structs), anche se questo può sembrare a prima vista controproducente ... Ciascuno degli obiettivi (ad. es. il riconoscimento dei comandi da stdin e la manipolazione dell'array delle voci) può essere affrontato separatamente (per esempio scrivendo prima lo _scheletro_ del programma che riconosce solo i comandi e stampa solo cosa ha riconosciuto). Spero che questo vi abbia fatto capire quanto sia importante riuscire a suddividere il problema in sottoproblemi più semplici da sviluppare e da testare. Certo, il tempo a disposizione è stato insufficiente, e per questo l'ho immediatamente allungato non appena me ne sono accorto (e mi pare che gli esercizi prima del 6° non fossero poi così terribili). Il tempo a disposizione si può allungare solo se gli esercizi vengono diminuiti in numero o ridotti di difficoltà. Se siete d'accordo direi di finire il corso limitandoci a svolgere ancora solo 2 esercizi e di prenderci 2 settimane per ciascuno (questo necessariamente pone la consegna del'8° durante le feste). Spero che il riconoscimento dei comandi da stdin ora sia chiaro ... visto che sarà necessario per gli esercizi 7° ed 8°. -- Comment added by Users.AndreaSterbini on 05 Dec 2002 ---- ---+++ obiettivi? .. guardi dei 57 che hanno consegnato quanti hanno usato fgets.... e vediamo se l'obiettivo e' stato raggiunto.... -- Comment added by Users.ElisabettaDAiutolo on 05 Dec 2002 ---- ---+++ Dipende ... *Sterbini docet*: "Spero che questo vi abbia fatto capire quanto sia importante riuscire a suddividere il problema in sottoproblemi più semplici da sviluppare e da testare." Verissimo ...... ma a volte, se i sottoprogrammi sono troppi (da fare in tot di tempo), nel singolo contesto, potrebbero funzionare benissimo ma uniti tutti in un programma potrebbero riscontrare diversi problemi d'incompatibilità tra di loro ..... come ad esempio mi è successo che c'ho messo un bel pò per fare interagire bene il programmino che gestisce il nome e cognome in input con gli altri .... *Per Elisabetta* : io l'avevo consegnato unsando lo scanf .(meno male che è stato allungato il tempo .... avevo lasciato in sospeso , per mancanza di tempo, diversi bugs che avevo trovato) -- Comment added by Users.AndreaBandino on 05 Dec 2002 ---- ---+++ ... obiettivi ... Più o meno 12 su 57 hanno usato gets o fgets, e 9 getchar o getc e 44 scanf ... :-) -- Comment added by Users.AndreaSterbini on 05 Dec 2002 ---- ---+++ Re: obiettivi Mi aggiungo al commento di Elisabetta (sperando di non alzare polemiche o altro). Anche io lavoro e non mi e' molto facile riuscire a capire fino a che punto si e' arrivati a lezione, dico questo perche' e' normale che esistano diversi modi per implementare un algoritmo a seconda degli strumenti che si hanno. E qui che, almeno per me, nasce il problema. Infatti se non so dove si e' arrivati e' implicito il dubbio se sia "corretto" utilizzare strumenti che ancora non sono stati spiegati. Altre volte mi ritrovo che su twiki vengono citate cose tipo: fgets(appunto), fflush, etc... che mi lasciano quella sensazione tipo: <<Mai sentita!!!!>> oppure <<Ma allora si puo' usare anche quella!>>. Io alla fine mi concentro sul testo, e nello specifico sulla parte obiettivi, e cerco di utilizzare quello che viene citato seguendo il ragionamento: "Se il Prof. assegna un'esercizio dicendo di utilizzare queste funzioni/dati/etc.. allora significa che si puo' fare!". Quindi in questo caso, anche se non e' stata proprio una passeggiata, ho utilizzato solo scanf, sscanf, printf e mi pare di ricordare una sprintf (se mi ricordo bene e se esiste! :-) ). Concludo associandomi all'idea di fare solo altri due ex con un po' piu' di tempo, specialmente se servono per l'esame! :-) -- Comment added by Users.TizianoMorgia on 05 Dec 2002 ---- ---+++ Chiarimenti su fgets... Deduco dal commento di Elisabetta che la funzione fgets() non e' vista di buon occhio. Inizialmente io per scaricare i dati da stdin usavo fflush(), poi pero' ne ho scoperto gli effetti negativi su linux (ho cercato su google e ho notato di non essere il solo ad avere il problema), allora sono arrivato alla conclusione di scaricarlo usando la fgets ed una variabile di appoggio. Per fare il parsing dell'input ho comunque usato sscanf/strtok ... Posso sapere cosa c'e' di male ? :) ... Comunque non mi costa niente provare a fare come ha indicato il professore ed eliminare quel metodo, forse poco ortodosso, di liberarsi dei dati di stdin. Io sto facendo questi esercizi per imparare il piu' possibile e non credo che usando un fgets() finale abbia rovinato questo 'goal' :) .<br>Concludo accodandomi alla proposta del professore di fare solo due esercizi, in modo che ci sia piu' tempo per discuterci sopra dato che l'esame e' alle porte. -- Comment added by Users.MauroFerrara on 05 Dec 2002 ---- ---++++ Sempre riguardo la fgets Ok ho fatto l'hack al programma e ho rimosso la fgets.. <br> Questo era prima<br> <verbatim> [supergate@mordor homework6]$ cat homework6.c | wc -l 573 [supergate@mordor homework6] </verbatim> <br>Questo invece e' dopo<br> <verbatim> [supergate@mordor homework6]$ cat homework6-scanf.c | wc -l 572 [supergate@mordor homework6]$ </verbatim> <br> Insomma NON USANDO la fgets viene una riga in meno (spero comunque di ottimizzarlo dato che e' immenso). Ora sono proprio sicuro: usando quella fgets finale non ho imparato meno, ora pero' so una cosa in piu' :) -- Comment added by Users.MauroFerrara on 05 Dec 2002 ---- ---+++ Difficoltà esercizi e obiettivo Vorrei esprimere il mio umile parere al riguardo. Innanzitutto sono pienamente d'accordo con l'idea del prof. di concederci 2 settimane per il 7 e l'8. (apprezzo la sua disponibilità "in rete" durante le feste. non tutti i prof. cercano di venire così incontro agli studenti). Il 6 è stato bello duro e anche adesso ho qualche dubbio. Però credo che il tempo (molto!) che gli dedicato sia stato fruttuoso. Forse domani non consegnerò una versione perfetta e completa, ma adesso ne so ceratamente più di prima. Credo che l'obiettivo primario non dovrebbe essere quello di fare l'ex giusto così poi me becco 2 punti in---+, ma testare le nostre capacità e accrescere le conoscenze in vista dell'esame. Ci si preoccupa troppo di fare l'esercizio giusto, completo e ordinato. Il livello di difficoltà credo che sia aumentato in modo esponenziale dopo il 3. Io informatica l'ho fatta a scuola e mi ricordo problemi molto---+ semplici.Mi immagino che quelli che un compilatore non sapevano cosa fosse abbiano lasciato stare e si siano messi a giocare a DOOMsmile! Speriamo che i prossimi sia un po' più facili! -- Comment added by Users.GiovanniColombi on 05 Dec 2002 ---- ---+++ Logica ok, qualcuno può spiegarmi il motivo *logico* del comportamento di questo pezzo di codice <verbatim> char prova[100]; scanf("%[^\n]",prova); //mi fa immettere stringa1 printf("hai immesso:%s\n",prova); //stampa stringa1 scanf("\n%[^\n]",prova); //mi fa immettere stringa2 printf("hai immesso:%s\n",prova); //stampa stringa2 scanf("%[^\n]",prova); //come se non esistesse -> ho tolto lo \n davanti a % printf("hai immesso:%s\n",prova); //stampa stringa2 </verbatim> grazie, Laura ---- Indovina chi risponde :) Dopo il secondo _scanf_ NON hai letto il \n che si trova ancora nello stream di _stdin_ (perche' glielo hai detto esplicitamente). Anche con la terza _scanf_ gli dici esplicitamente di NON leggere quel carattere, quindi semplicemente non assegna nulla a _prova_ e termina. (Con il \n che si trovava ancora sullo _stdin_, ma ormai non gliene frega piu' niente a nessuno). -- Users.ArcangeloTripi - 06 Dec 2002 ---- ci avrei scommesso :) vediamo se ho capito: lo \n della prima _scanf_ viene rigurgitato dalla 2° _scanf_ grazie a quello \n messo prima di %,ok? a questo punto mi chiedo: c'è un modo per pulire questo stream di _stdin_ dopo ogni _scanf_ per non avere sorprese nelle _scanf_ successive? laura ---- ---+++ Non ho capito la gets() si puo usare o no? -- Comment added by Users.LeonardoParisi on 06 Dec 2002 ---- *A proposito dello \n* ... visto che la scanf precedente ha lasciato lo \n nell'input per leggere la riga successiva e' necessario consumarlo ... per cui basta che tutte le scanf successive alla prima abbiano come primo carattere lo \n. (Se invece si mettesse lo \n in fondo a tutte le scanf succederebbe che per leggere l'ultima riga ci sarebbe bisogno di un <enter> in piu' ... il che non andrebbe bene) *gets* ... io ho usato scanf ma potete usare quello che volete ... *obiettivi e uso di argomenti non spiegati* ... negli esercizi io do' dei punti di riferimento coi quali e' possibile svolgere l'esercizio ... ma naturalmente chi vuol usare altri strumenti e' libero di farlo (oppure di chiedere se ci sono controindicazioni). -- Comment added by Users.AndreaSterbini on 06 Dec 2002 ---- ---+++ x Laura Se vuoi consumare l' *ultimo* \n che resta sullo stream _stdin_ , probabilmente la cosa piu' semplice e' di usare un singolo _getchar()_ Avrei aggiunto il commento dopo il tuo, ma se ci prove twiki fa le bizze. -- Comment added by Users.ArcangeloTripi on 06 Dec 2002 ---- Se vuoi inserire un commento vicino alla domanda basta che editi la pagina. -- Comment added by Users.AndreaSterbini on 06 Dec 2002 ---- ---+++ X il prof! Scusi prof x la domand ake nn riguarda il 6 ex! volevo chiederle perche nella correzione del primo esercizio ha sistemato solo i programmi di quelli che non passavano la compilazione ed invece nn ha guardato x niente ki aveva messo uno \n in piu nella stampa dei dati personali? d'altronde era il primo esercizio! e x uno \n risultano tutti no! sia piu comprensivo grazie! -- Comment added by Users.AndreaSantoro on 06 Dec 2002 ---- Per "sistemare" i programmi che falliscono per un \n li dovrei editare uno per uno ... sono troppi. -- Comment added by Users.AndreaSterbini on 06 Dec 2002 Capisco che saranno anche troppi come dice lei prof quei programmi ma si tratta sempre di un "innocuo" \n ! quanto tempo le puo togliere? al contrario invece a noi puo togliere qualcosa se dovessimo andare bene alla prova scritta! speriamo bene! :) ciao ---- ---+++ sort compleanno il sort del compleanno va stampato in questa maniera: mese-giorno o giorno-mese, cioè 10-31 oppure 31-10? grazie -- Comment added by Users.CristianoMarra on 06 Dec 2002 ---- il sort del compleanno non va stampato, ma eseguito ... devi ordinare le voci dell'agenda in ordine crescente di mese-giorno sarà la stampa successiva a stampare le voci -- Comment added by Users.AndreaSterbini on 06 Dec 2002 ---- ---+++ vorrei consegnare ma... con questo homework colleziono le cose piu' strane.... i nomi composti ad esempio..come detto e ridetto metto lo spazio tra le parentesi quadre.... tipo: sscanf(rigaint," %[a-zA-Z ]", &R[dim].nome); quando metto il comando in esecuzione add "pape rino" pluto 12-12-1233 email eee mi acquisisce i campi vuoti ! non ne posso piu' -- Comment added by Users.ElisabettaDAiutolo on 06 Dec 2002 ---- ---+++ vorrei consegnare ma (il ritorno) come da suggerimento del Prof metto a zero i campi della struttura entro le functions... aggiungo un SOLO nome nella rubrica e quando stampo una serie di caratteri spuri escono come in un secondo record... giuro che ho azzerato i campi -- Comment added by Users.ElisabettaDAiutolo on 06 Dec 2002 ---- la stringa della scanf sopra è sbagliata ... ti sei dimenticata delle virgolette invece di ==sscanf(rigaint," %[a-zA-Z ]", &R[dim].nome);== è meglio ==sscanf(rigaint," \"%[a-zA-Z ]\"", &R[dim].nome);== (hai anche messo uno spazio come primo carattere ... controlla se è necessario) -- Comment added by Users.AndreaSterbini on 06 Dec 2002 ---- C'e' un altro errore ... dato che *nome* è (immagino) un array di caratteri, non ne devi calcolare il riferimento ... quindi TOGLI IL '&' ! :-) -- Comment added by Users.AndreaSterbini on 06 Dec 2002 ---- ---+++ grazie :) -- Comment added by Users.ElisabettaDAiutolo on 06 Dec 2002 ---- ---+++ ma l'apostrofo.... che voglio sia accettato lo metto nelle parentesi quadre.... nulla !!! ho provato a metterci anche un back slash davanti.. -- Comment added by Users.ElisabettaDAiutolo on 06 Dec 2002 ---- vogliamo provare a usare una soluzione un po' radicale? prova =="\"%[^\"\n]\""== (ovvero tutto tranne '"' e '\n') -- Comment added by Users.AndreaSterbini on 06 Dec 2002 ---- ma così non funziona per i nomi senza spazi! Non ci sto capendo---+ nulla! Forse perchè è un po' tardino per togliersi gli ultimi dubbi... devo consegnare!!! -- Comment added by Users.GiovanniColombi on 06 Dec 2002 ---- ---+++ Urgente!!!! scusate ma nel prox mi sono accorto che non quadra una cosa... almeno da come ho capito io che bisogna implementarlo!!!! se uno fa la chiamata a prox 11-10 e non ci sta nessuno che compie gli anni in quel giorno noi dobbiamo cercarlo in avanti quindi 12-10 poi 13-10 ecc... poi si cambia mese 1-11 , 2-11 ecc e bisogna considerare l'anno ciclico.... ma se uno alla fine compie gli anni il 9-10 in questo caso viene scarto e viene messo per ultimo.... e non sarebbe piu' giusto controllare in dietro fino al mese di gennaio e poi andare avanti -- Comment added by Users.LeonardoParisi on 06 Dec 2002 ---- ---+++ RE: urgente credo (o almeno io l'ho pensata cosi') che un comando chiamato "prox" ritorni il primo compleanno che *verra'* da una data immessa. Calcolando che noi, non andiamo indietro nel tempo :-) e che (almeno per quanto mi riguarda) non sappiamo prendere la data di sistema, il comando "prox" serva a simulare una sorta di "promemoria" per i compleanni che verranno. Spero di aver capito, e nel caso averti risolto, il problema...naturalmente se e' giusto quello che ho detto (non vorrei ripetere errori tipo la descrizione del funzionamento della scanf :-) ). -- Comment added by Users.TizianoMorgia on 06 Dec 2002 ---- ---+++ Errore evitabile (me tapina) ? seguendo le indicazioni della risposta *Quali controlli* per la parte _facoltativa_ di controllo: <verbatim> email:---+<caratteri senza spazio e @>@<caratteri senza spazio e @><punto><caratteri senza spazio, punto e @> </verbatim> avevo capito che dopo chiocciola e punto non ci potessero essere altri punti (non in realtà ma nell'esercizio)... risultato catastrofico perchè stampo email errata sull'email di sterbini... e sgrunc! -- Comment added by Users.LauraRavagli on 07 Jan 2003 ---- Dispiace anche a me :-( -- Comment added by Users.AndreaSterbini on 07 Jan 2003 ---- dont' worry, l'importante è partecipare alle battaglie e vincere la guerra :) -- Comment added by Users.LauraRavagli on 07 Jan 2003 ---- ... immagina che la guerra non esista ... (vedi "Imagine ..." di John Lennon) -- Comment added by Users.AndreaSterbini on 07 Jan 2003 ---- però non è detto che: it's easy if u try (...my war is the C examination...) -- Comment added by Users.LauraRavagli on 07 Jan 2003 ---- ---+++ Hwork6 scusi ma perche' in " 1-add-semplice.in " poi in out deve stampare a un certo punto piena?! non l'ho capito.... non doveva stampare piena solo quando la lista era piena ovvero 20 voci? e li sono invece solo 2 ?! grazie e ciao -- Comment added by Users.LeonardoParisi on 07 Jan 2003 ---- Ciao Leonardo!<br> Guarda la sequenza di input:<br> <br>prima stampa ma la rubrica e' vuota.. <br>adda due nomi e li stampa <br>poi ne adda 19... pero' al 21esimo add la rubrica ha gia' 20 voci... quindi stampa piena <br>poi stampa e vengono listate le prime 20 voci inserite <br><br> Quindi quando ha stampato piena era perche' ha provato ad inserire una 21esima voce...! Spero di esserti stato utile ( e spero di essere stato poco contorto :) ).<br> (ho spostato la domanda :) ) -- Comment added by Users.MauroFerrara on 07 Jan 2003 %COMMENT{button=" Aggiungete la domanda " mode="before" lines="5"}% <a name="form"> * Ricordatevi di dare un titolo alla vostra domanda come segue: <verbatim> <tre spazi>---+++<spazio>Titolo della domanda Testo della domanda </verbatim>
E
dit
|
A
ttach
|
Watch
|
P
rint version
|
H
istory
: r272
<
r271
<
r270
<
r269
<
r268
|
B
acklinks
|
V
iew topic
|
Ra
w
edit
|
M
ore topic actions
Topic revision: r272 - 2003-09-30
-
AndreaSterbini
Log In
or
Register
Programmazione1/AA0506/PZ Web ...
Programmazione1/AA0506/PZ Web
Programmazione1/AA0506/PZ Web Home
Users
Groups
Index
Search
Changes
Notifications
Statistics
Preferences
User Reference ...
User Reference
ATasteOfTWiki
TextFormattingRules
TWikiVariables
FormattedSearch
TWikiDocGraphics
TWikiSkinBrowser
InstalledPlugins
ChangeEmailAddress
ChangePassword
ResetPassword
Prenotazioni esami
Laurea Triennale ...
Laurea Triennale
Algebra
Algoritmi
Introduzione agli algoritmi
Algoritmi 1
Algoritmi 2
Algoritmi per la
visualizzazione
Architetture
Prog. sist. digitali
Architetture 2
Basi di Dati
Basi di Dati 1 Inf.
Basi di Dati 1 T.I.
Basi di Dati (I modulo, A-L)
Basi di Dati (I modulo, M-Z)
Basi di Dati 2
Calcolo
Calcolo differenziale
Calcolo integrale
Calcolo delle Probabilitą
Metodi mat. per l'inf. (ex. Logica)
canale AD
canale PZ
Programmazione
Fond. di Programmazione
Metodologie di Programmazione
Prog. di sistemi multicore
Programmazione 2
AD
EO
PZ
Esercitazioni Prog. 2
Lab. Prog. AD
Lab. Prog. EO
Lab. Prog. 2
Prog. a Oggetti
Reti
Arch. di internet
Lab. di prog. di rete
Programmazione Web
Reti di elaboratori
Sistemi operativi
Sistemi Operativi (12 CFU)
Anni precedenti
Sistemi operativi 1
Sistemi operativi 2
Lab. SO 1
Lab. SO 2
Altri corsi
Automi, Calcolabilitą
e Complessitą
Apprendimento Automatico
Economia Aziendale
Elaborazione Immagini
Fisica 2
Grafica 3D
Informatica Giuridica
Laboratorio di Sistemi Interattivi
Linguaggi di Programmazione 3° anno Matematica
Linguaggi e Compilatori
Sistemi Informativi
Tecniche di Sicurezza dei Sistemi
ACSAI ...
ACSAI
Computer Architectures 1
Programming
Laurea Magistrale ...
Laurea Magistrale
Percorsi di studio
Corsi
Algoritmi Avanzati
Algoritmica
Algoritmi e Strutture Dati
Algoritmi per le reti
Architetture degli elaboratori 3
Architetture avanzate e parallele
Autonomous Networking
Big Data Computing
Business Intelligence
Calcolo Intensivo
Complessitą
Computer Systems and Programming
Concurrent Systems
Crittografia
Elaborazione del Linguaggio Naturale
Estrazione inf. dal web
Fisica 3
Gamification Lab
Information Systems
Ingegneria degli Algoritmi
Interazione Multi Modale
Metodi Formali per il Software
Methods in Computer Science Education: Analysis
Methods in Computer Science Education: Design
Prestazioni dei Sistemi di Rete
Prog. avanzata
Internet of Things
Sistemi Centrali
Reti Wireless
Sistemi Biometrici
Sistemi Distribuiti
Sistemi Informativi Geografici
Sistemi operativi 3
Tecniche di Sicurezza basate sui Linguaggi
Teoria della
Dimostrazione
Verifica del software
Visione artificiale
Attivitą complementari
Biologia Computazionale
Design and development of embedded systems for the Internet of Things
Lego Lab
Logic Programming
Pietre miliari della scienza
Prog. di processori multicore
Sistemi per l'interazione locale e remota
Laboratorio di Cyber-Security
Verifica e Validazione di Software Embedded
Altri Webs ...
Altri Webs
Dottorandi
Commissioni
Comm. Didattica
Comm. Didattica_r
Comm. Dottorato
Comm. Erasmus
Comm. Finanziamenti
Comm. Scientifica
Comm Scientifica_r
Corsi esterni
Sistemi Operativi (Matematica)
Perl e Bioperl
ECDL
Fondamenti 1
(NETTUNO)
Tecniche della Programmazione 1° modulo
(NETTUNO)
Seminars in Artificial Intelligence and Robotics: Natural Language Processing
Informatica generale
Primo canale
Secondo canale
II canale A.A. 10-11
Informatica
Informatica per Statistica
Laboratorio di Strumentazione Elettronica e Informatica
Progetti
Nemo
Quis
Remus
TWiki ...
TWiki
Tutto su TWiki
Users
Main
Sandbox
Home
Site map
AA web
AAP web
ACSAI web
AA2021 web
Programming web
AA2021 web
AN web
ASD web
Algebra web
AL web
AA1112 web
AA1213 web
AA1920 web
AA2021 web
MZ web
AA1112 web
AA1213 web
AA1112 web
AA1314 web
AA1415 web
AA1516 web
AA1617 web
AA1819 web
Old web
Algo_par_dis web
Algoreti web
More...
PZ Web
Create New Topic
Index
Search
Changes
Notifications
RSS Feed
Statistics
Preferences
P
View
Raw View
Print version
Find backlinks
History
More topic actions
Edit
Raw edit
Attach file or image
Edit topic preference settings
Set new parent
More topic actions
Account
Log In
Register User
Questo sito usa cookies, usandolo ne accettate la presenza. (
CookiePolicy
)
Torna al
Dipartimento di Informatica
E
dit
A
ttach
Copyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback