Telefonino.net network
 
| 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 » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 03-09-2004, 13.09.53   #1
NS-1
Hero Member
 
L'avatar di NS-1
 
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
NS-1 promette bene
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;
}
non capisco perchè nelle istruzioni finali di printf mi esegue un '\n' che non c'è... cosa sbaglio?

grazie
___________________________________

...ad ogni alba sorgerà il tuo profumo
NS-1 non è collegato   Rispondi citando
Vecchio 03-09-2004, 13.17.04   #2
NS-1
Hero Member
 
L'avatar di NS-1
 
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
NS-1 promette bene
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
NS-1 non è collegato   Rispondi citando
Vecchio 03-09-2004, 19.49.09   #3
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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 ?
LoryOne non è collegato   Rispondi citando
Vecchio 03-09-2004, 20.01.38   #4
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Quota:
ho visto che il problema sta nella dichiarazione della variabile char all'interno della struct...
Il C è da buttare allora !
LoryOne non è collegato   Rispondi citando
Vecchio 04-09-2004, 14.41.17   #5
unomichisiada
Newbie
 
Registrato: 08-07-2004
Messaggi: 47
unomichisiada promette bene
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.
unomichisiada non è collegato   Rispondi citando
Vecchio 04-09-2004, 19.22.48   #6
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Quota:
len = strlen(primo.nome);
primo.nome[len-1] = '\0';
(Y)
Speriamo che NS-1 abbia risolto.
LoryOne non è collegato   Rispondi citando
Vecchio 04-09-2004, 20.51.43   #7
unomichisiada
Newbie
 
Registrato: 08-07-2004
Messaggi: 47
unomichisiada promette bene
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.
unomichisiada non è collegato   Rispondi citando
Vecchio 06-09-2004, 09.16.33   #8
NS-1
Hero Member
 
L'avatar di NS-1
 
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
NS-1 promette bene
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
NS-1 non è collegato   Rispondi citando
Vecchio 06-09-2004, 10.13.30   #9
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Probabilmente perchè fgets() è più usato per leggere stringhe di testo da un file, non per effettuare l'input da tastiera.
LoryOne non è collegato   Rispondi citando
Vecchio 06-09-2004, 12.02.05   #10
NS-1
Hero Member
 
L'avatar di NS-1
 
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
NS-1 promette bene
scusa... e grazie per l'info...
___________________________________

...ad ogni alba sorgerà il tuo profumo
NS-1 non è collegato   Rispondi citando
Vecchio 06-09-2004, 12.10.37   #11
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Scusa de che ?
La prossima volta non esci più per una settimana, chiaro ?
LoryOne non è collegato   Rispondi citando
Vecchio 06-09-2004, 12.35.16   #12
NS-1
Hero Member
 
L'avatar di NS-1
 
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
NS-1 promette bene
___________________________________

...ad ogni alba sorgerà il tuo profumo
NS-1 non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

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

Orario GMT +2. Ora sono le: 00.36.01.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.