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

Mi sapete dire perchč non funziona?
In pratica questo programma dovrebbe scrivere "un nome fantastico" quando si
scrive eleonora, altrimenti "che schifo di nome", perchč non funziona?
#include <stdio.h>
char nome;
main()
{
 printf ("Come ti chiami?:");
 scanf ("%c", &nome);
 if(nome = eleonora)
  printf("Un fantastico nome");
 else
  printf("Che schifo di nome");
}

  if(nome = eleonora)
non significa nulla, l'operatore di confronto è == e non =, ma non è questo
l'errore.
eleonora andrebbe fra doppi apici in quanto stringa, ma non puoi confrontare
un carattere con una stringa.
potresti usare stringcmp()


potresti usare stringcmp()
strcmp()
--
Rhymes (
rhymes_...@myself.com
)
http://www26.brinkster.com/rhymes
" ride or die "

 strcmp()
Riassumendoti il tutto, il codice diventa:
#incldue <stdio.h>
#include <string.h>
int main ()     // Attenzione: main *deve* essere int
{
        char nome [1024];
        printf ("Inserisci il tuo nome: ");
        scanf ("%s", nome);
        // se le due stringhe sono uguali, strcmp ritorna 0
        if (strcmp(nome, "Eleonora") == 0)
                printf ("Un fantastico nome\n");
        else
                // Siamo gentili ;-)
                printf ("Un nome non bello come Eleonora\n");
        return 0;       // in quanto main è int
}
Ha un grosso problema: se qualcuno ti mettesse un nome di 1024 o più
caratteri?
-- 
Andrea Bergia - studente          Linux Registred User #281550
Per favore non mandatemi allegati in Word o PowerPoint.
Si veda 
http://www.fsf.org/philosophy/no-word-attachments.html


io direi che ce ne di più :-)

 potresti usare stringcmp()
Beh, *dovrebbe* (e non potrebbe) usare strcmp()...
-- 
---
In silenzio anche un idiota sembra intelligente. Ma non c'è problema,
l'idiota vuol sempre dire la sua.

  if(nome = eleonora)
Un crogiuolo di errori ;-)
Sempre ammettendo la dichiarazione di nome come ho fatto io, immagino 
volessi fare:
if(strcmp(nome, "eleonora")==0)


 Si veda 
http://www.fsf.org/philosophy/no-word-attachments.html
perchč nella scanf("%s",nome) non ci vuole la & prima di nome? (forse perchč
č un array?)

 perchè è un array?)
Si, in tutti gli altri casi devi passare un puntatore perche' e' l'unico 
modo per poter modificare i contenuti della variabile... nel caso di un 
array ottieni automaticamente un puntatore (al primo elemento) con la 
chiamata a funzione e ti permette di modificarne i contenuti.
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

caratteri?
perchè quoti a me :P ?


int main ()     // Attenzione: main *deve* essere int
Perchè deve??
main è una funzione, di consegenza può anche essere void,
Inoltre se scrivi
main()
{
.....
}
il compilatore la considera int per default, e se non ritorni nessun
valore alcuni compilatori neanche protestano (vedi gcc).
Ciao
Fabio
fabi...@inwind.it
Studente di Informatica presso
l'Università degli Studi La Sapienza

 caratteri?
Visto la totale assenza di conversioni (sta leggendo solo caratteri
alfabetici)
   fgets(&nome, 1024, stdin);
e passa la paura dei buffer overflow.
C:\>iao Angelo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

valore alcuni compilatori neanche protestano (vedi gcc).
L'importante non e` restituire o meno un valore, ma che il prototipo
di main() sia quello corretto (ovvero una funzione che restituisce un
int).  La forma:
main()
{
}
non e` piu` accettata dallo standard, bisogna specificare
*obbligatoriamente* il tipo di ritorno e se i compilatori la
supportano e` solo per compatibilita` all'indietro.

 main è una funzione, di consegenza può anche essere void,
main deve rispondere ad un preciso prototipo che vede appunto un valore di 
ritorno int. 
Costruire una void main() può essere consentito dal tuo compilatore e può 
essere accettato di buon grado dal tuoi sistema, ma il fatto che non 
succeda nulla è (in un certo senso) uno dei possibili risultati indefiniti.


    fgets(&nome, 1024, stdin);
Senza la & davanti a nome. E comunque non ho usato questa funzione per il
semplice fatto che aggiunge anche lo \n al fondo del buffer, e poteva
essere un po' complesso per l'OP (data la sua confusione) capire il ciclo
per rimuoverlo... :-) Ciao


per rimuoverlo... :-) Ciao
ciclo ?
s[strlen(s)-1] = '\0';

Andrea Laforgia ha scritto:

emm... Ops :-)


emm... Ops :-)
Comunque ci tengo a precisare che il metodo da me proposto va bene
solo se si controlla che l'ultimo carattere della stringa sia,
effettivamente, un new-line.

 effettivamente, un new-line.
Ovvero (per l'OP):
char *p;
...
if ((p = strchr(s, '\n')))
        *p = '\0';
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Un apostolo vedendo Gesu` camminare sulle acque:
- Cazzo se e` buono 'sto fumo!!!

        *p = '\0';
Non amo questo tipo di sintassi.  Molto piu` leggibile, a mio avviso:
char *p;
 
p = strchr(s, '\n');
if (p) 
{
   *p = '\0';
}