Re: [C] Progetto di programmazione.

Messaggioda vict85 » 27/09/2021, 10:13

C'è un problema nella tua read_line: quando scrivi una riga più lunga di 20 caratteri, tu stoppi la lettura, quindi il resto della parola viene considerata come un parola nuova anche se non è quello che ci si aspetta. Inoltre parli di parola, ma nel tuo codice una riga come:
Codice:
una riga con più parole

viene letta come due parole: una riga con più p e arole (o qualcosa del genere, ho calcolato a mano il punto in cui si spezza).


Inoltre, e questo è un errore grave, passi alla funzione read_line il valore MAX_WORD, anche se puoi al massimo scrivere MAX_WORD-1 caratteri. Insomma str[MAX_WORD] è fuori dalla stringa.

P.S.: errore mio: ho aggiunto mentalmente un break dove non c'era. Ma il secondo errore c'è ed è qualcosa su cui devi fare attenzione.
vict85
Moderatore
Moderatore
 
Messaggio: 10504 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: [C] Progetto di programmazione.

Messaggioda Yuyu_13 » 28/09/2021, 16:18

Ringrazio a tutti per i consigli che mi avete dato !!
Sono tornato indietro, sto rileggendo dai puntatori, ho un pò di confusione nella testa, voglio assimilare bene i concetti e poi proseguire.

Per il momento grazie a tutti.

Saluti
Yuyu_13
Junior Member
Junior Member
 
Messaggio: 95 di 373
Iscritto il: 14/06/2021, 14:44

Re: [C] Progetto di programmazione.

Messaggioda apatriarca » 29/09/2021, 11:25

Sinceramente come primo tentativo non era così male. Se fossi in te cercherei di fare degli esercizi piuttosto che soffermarmi troppo sulla teoria e i concetti. Lo dico sia perché ci sono un sacco di risorse di dubbia qualità in giro (e non so di che qualità sia il tuo libro o il materiale del corso), sia perché alcuni concetti li si impara meglio vedendoli usati in pratica.

Per esempio puoi fare degli esercizi su array e stringhe per ripassare alcune delle tue carenze in questo esercizio. Alcuni esercizi potrebbero essere i seguenti:
1. Scrivi un programma che legge una parola da standard input e stampa la parola al contrario. Una parola è definita come una sequenza di caratteri alfabetici senza spazi o altri simboli all'interno. Devi insomma ignorare gli spazi e ogni carattere che non sia alfabetico prima della parola e ti devi fermare al primo carattere non alfabetico. Per esempio se uno inserisce " ciao mondo" devi stampare "oaic" e ignorare il resto.
2. Scrivi un programma che legge una sequenza di numeri positivi (zero compreso) da standard input e si ferma al primo numero negativo. Deve stampare il massimo, il minimo e la media. Il numero negativo non va considerato. In una prima versione puoi assumere che esiste un numero massimo di valori che puoi inserire (per esempio 1000), ma poi cerca di modificare il codice in modo da eliminare questo limite e quindi senza memorizzare tutti i numeri.
3. Scrivi un programma che riceve in input due numeri naturali con un numero di cifre inferiore a 100. Il numero deve stampare la loro somma. Nota che non puoi fare uso di variabili intere perché nessuna di quelle disponibili può rappresentare numeri così grandi...
4. Scrivi un programma che legge due stringhe da standard input su due righe separate e stampa "SI" se la seconda è una sottostringa della prima (cioè compare all'interno della prima) oppure "NO" in caso contrario. Per esempio se hai "abracadabra" e "ra" allora devi restituire "SI" se invece la seconda stringa fosse stata "raz" allora avresti dovuto stampare "NO".

E se hai bisogno di una mano, per esempio vuoi dei suggerimenti o vuoi controllare la tua risposta, chiedi pure.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5594 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: [C] Progetto di programmazione.

Messaggioda vict85 » 29/09/2021, 12:36

Secondo me stai cercando di ottimizzare un po' troppo. Lo si può immaginare dall'uso del goto invece del break e dal fatto che non usi fgets o gets_s(se non addirittura getline) per la lettura delle stringhe1. Anche l'uso di for(;;) può essere visto in questo modo. In realtà non sono affatto sicuro che i tuoi tentativi abbiano davvero un effetto sulle performance generali, e comunque sono trascurabili rispetto ad una scelta appropriata dell'algoritmo.

Quindi prima pensa all'algoritmo e poi eventualmente ottimizza. Per ora ti direi comunque di ignorare le performance (se non quando scegli l'algoritmo).

Note

  1. Seppur sia positivo che non usi gets dato che è una funzione molto pericolosa e deprecata.
vict85
Moderatore
Moderatore
 
Messaggio: 10508 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Precedente

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite