|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
03-09-2004, 13.09.53 | #1 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
|
STRUCT C e problema '\n'...
Codice:
#include <stdio.h> #include <stdlib.h> typedef struct{ int anni; char nome[64]; }persona; main(){ persona primo; persona *ptrPrimo; ptrPrimo = &primo; printf("Inserisci il nome: "); fgets(primo.nome, 60, stdin); printf("Inserisci anni: "); scanf("%d", &primo.anni); printf("\n\nNome: %s - Anni: %d\n\n", primo.nome, primo.anni ); printf("Nome: %s - Anni: %d\n\n", ptrPrimo->nome , ptrPrimo->anni ); printf("Nome: %s - Anni: %d\n\n", (*ptrPrimo).nome, (*ptrPrimo).anni ); system("PAUSE"); return 0; } grazie
___________________________________
...ad ogni alba sorgerà il tuo profumo |
03-09-2004, 13.17.04 | #2 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
|
ho visto che il problema sta nella dichiarazione della variabile char all'interno della struct...
non sapendo quanto sarà lungo il nome inserito, cosa devo fare per stampare solo i caratteri fino al '\0'? c'è qualche funzione che può aiutarmi oppure la devo fare a mano? grazie...
___________________________________
...ad ogni alba sorgerà il tuo profumo |
03-09-2004, 19.49.09 | #3 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Lanciando il programma così com'è ho riscontrato queste due anomalie:
- Se effettuo l'input di lunghezza <60 il programma non crasha e gli anni li scrive una riga sotto - Se effettuo l'input di lunghezza >=60 il programma non crasha e gli anni vengono scritti sulla stessa riga, come è giusto che sia. Risponderò al tuo quesito con due domande: Sapresti spiegare perchè ? Come si comporta fgets() o meglio, cosa restituisce ? Nb: Conosci l'importanza delle safe strings in C ? |
03-09-2004, 20.01.38 | #4 | |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Quota:
|
|
04-09-2004, 14.41.17 | #5 |
Newbie
Registrato: 08-07-2004
Messaggi: 47
|
La fgets (e anche la gets che è una fgets su stdin) se lo legge (cioè se prima non arriva al limite massimo di caratteri da leggere specificato nel'argomento) inserisce il carattere '\n' nella stringa letta perciò per risolvere il tuo problema è sufficiente sostituire tale carattere con un terminatore di stringa '\0' come ho fatto io nelle due istruzioni delimitate ai commenti.Ciao
Codice:
#include <stdio.h> #include <stdlib.h> typedef struct{ int anni; char nome[64]; }persona; main(){ persona primo; persona *ptrPrimo; int len; ptrPrimo = &primo; printf("Inserisci il nome: "); fgets(primo.nome, 60, stdin); //----------------------- len = strlen(primo.nome); primo.nome[len-1] = '\0'; //----------------------- printf("Inserisci anni: "); scanf("%d", &primo.anni); printf("\n\nNome: %s - Anni: %d\n\n", primo.nome, primo.anni ); printf("Nome: %s - Anni: %d\n\n", ptrPrimo->nome , ptrPrimo->anni ); printf("Nome: %s - Anni: %d\n\n", (*ptrPrimo).nome, (*ptrPrimo).anni ); system("PAUSE"); return 0; }
___________________________________
Sai che la fortuna è una religione:tu ci credi oppure no. |
04-09-2004, 19.22.48 | #6 | |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Quota:
Speriamo che NS-1 abbia risolto. |
|
04-09-2004, 20.51.43 | #7 |
Newbie
Registrato: 08-07-2004
Messaggi: 47
|
Beh il problema che denuncia lui queste due istruzioni lo risolvono...quindi se io ho compreso bene la sua domanda dovrebbe andar bene,le cose cambiano se io ho capito male...
___________________________________
Sai che la fortuna è una religione:tu ci credi oppure no. |
06-09-2004, 09.16.33 | #8 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
|
ma si può essere così...... lasciamo perdere....
grazie mille per l'aiuto.... ma secondo voi perchè aggiunge '\n'? non mi sembra una scelta prorpio intelligente.... grazie ancora... (Y)
___________________________________
...ad ogni alba sorgerà il tuo profumo |
06-09-2004, 10.13.30 | #9 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Probabilmente perchè fgets() è più usato per leggere stringhe di testo da un file, non per effettuare l'input da tastiera.
|
06-09-2004, 12.02.05 | #10 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
|
scusa... e grazie per l'info...
___________________________________
...ad ogni alba sorgerà il tuo profumo |
06-09-2004, 12.10.37 | #11 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Scusa de che ?
La prossima volta non esci più per una settimana, chiaro ? |
06-09-2004, 12.35.16 | #12 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
|
___________________________________
...ad ogni alba sorgerà il tuo profumo |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
Problema di comunicazione col masterizzatore | Shumila | Masterizzazione Giochi Games | 4 | 13-09-2007 07.40.31 |
Problema Pinnacle PCTV Pro e periferiche IDE | exion | Hardware e Overclock | 56 | 30-01-2005 11.44.47 |
1)RISOLUZIONE PROBLEMA ALGORITMO IN C | caralu | Programmazione | 13 | 06-10-2004 12.35.40 |
Problema con la masterizzazione... la colpa è della Audigy!!! Qualche idea??? | LaBrie | Windows 7/Vista/XP/ 2003 | 13 | 31-01-2004 15.28.25 |
Problema di lentezza ma solo certi momenti | Marko | Windows 7/Vista/XP/ 2003 | 3 | 12-09-2003 16.01.19 |