Newsgroup: it.comp.lang.c
Titolo: Newbie: ma dove sbaglio??

Ciao ho cercato di compilare il seg: codice con DevC++, ma mi da 3 errori.
Dove sbaglio?
#include <stdio.h>
long cubo(long x); //dichiaro il prototipo
long input, answer; //dichiaro le variabili
main()
//dichiaro la main
{ 
//apro il corpo della main
  printf("Per favore, inserisci un numero intero: "); //mando una stringa sullo schermo per l'input
  scanf("%d", &input); //prendo il valore che ha inserito l'utente
  answer=cube(input); //chiamo la funzione Cube e gli passo come parametro il valore di Input
  printf("\nIl valore di %ld č %ld. \n", input, answer); /* mando a schermo un messaggio in cui mostro 
                                                        il risultato, con input come valore da cui avere answer, il cubo*/
  return 0; //chiudo il programma mandando un valore zero al S.O.
 // chiudo il corpo della main
}
//Adesso devo chiamare la funzione
long cube(long x) //dichiarazione della funzione senza ; finale
{ 
//apro il corpo della funzione
  long x_cubed;//dichiaro una variabile locale
  x_cubed=x*x*x; //eseguo l'operazione
  return x_cubed; // restituisco il valore x_cubed ad answer
}
Gli errori che mi da sono:
8 c:\progra~1\devc__~1\examples\myproj~1\cubo1.c
 unterminated character constant
9 c:\progra~1\devc__~1\examples\myproj~1\cubo1.c
 unterminated character constant
22 c:\progra~1\devc__~1\examples\myproj~1\cubo1.c
 unterminated character constant
Grazie mille.

  unterminated character constant
Non è che ti sei dimenticato di chiudere le doppie virgolette da qualche
parte?non mi sembra dal sorgente che hai postato...forse non hai fatto il
copia in colla...controlla meglio.

 copia in colla...controlla meglio.
Ciao, il problema era che avevo detto al compilatore del DevC++ di attenersi
allo standard  ANSI C, ma tale standard sembra non supportare i commenti che
iniziano con // se il sorgente è salvato come file .C
Infatti ora funziona.

 copia in colla...controlla meglio.
Potresti aiutarmi ora con questo altro sorgente? Il tutto viene compilato
bene ma dopo che ho inserito il valore di a Win2000 termina il programma
dicendo che cha ha provocato 'Errori'; ecco il sorgente:
#include <stdio.h>
long espressione(long x);
long a,b,c, risultato, x_espressione;
main()
{
 printf("Inserisci il valore di a: ");
 scanf("%d", a);
 printf("Inserisci il valore di b: ");
 scanf("%d", b);
 printf("Inserisci il valore di c: ");
 scanf("%d", c);
 risultato=espressione(x_espressione);
 printf("\nIl risultato dell'espressione è: %ld.\n",a,b,c);
 return 0;
}
long espressione(long x)
{
 long x_espressione;
 x_espressione=a*b*c;
 return x_espressione;
}
Sto solo agli inizi, ancora non so usare bene le funzioni.
Ciao e grazie.


Talking about music is like dancing about architecture.
                -- Laurie Anderson

 scanf("%d", c);
                     ^^^
Le &??    :-)
Ciao
Marino
-- 
Mechanical Android Responsible for Infiltration and Nocturnal Observation

Hai ragione :), ma è solo il secondo giorno di studio!
Grazie mille.

 Le &??    :-)
E' vero! Grazie, ma sono solo due giorni di studio!!! :)

  scanf("%d", &input); //prendo il valore che ha inserito l'utente
Occhio, input e` un  long, mentre tu dici a scanf  di leggere un intero:
potresti trovarti garbage nella variabile input. Usa "%ld".
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Quando un uomo porta dei fiori a sua moglie senza motivo, 
un motivo c'e`.

 }
Solitamente l'uso di normali int e` piu` veloce dei long int (a meno che
tu non abbia esigenze particolari).
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"New processes are created by other processes, just like new
 humans. New humans are created by other humans, of course,
 not by processes." -- Unix System Administration Handbook

 }
la funzione potrebbe essere riscritta così :
long espression(long a, long b, long c)
{
    return a*b*c;
}
eliminando così la necessità di avere le veriabili globali dichiarati
all'inizio.



ma lo standard non diceva anche che il tipo di ritorno per default
(cioe' se non specificato) e' proprio l'int?
ciao
donCiccio

donCiccio wrote:

Lo standard C89 si', ma il nuovo standard C99 impone che il tipo di 
ritorno vada sempre specificato
-- 
Danilo Piazzalunga
Linux Registered User #245762 at 
http://counter.li.org
mailto:
leo-...@ibero.it

(cioe' se non specificato) e' proprio l'int?
No, anzi, dice che il valore di ritorno va *sempre*
specificato e se non lo si fa il compilatore si arrabbia.  
La pratica di ometterlo e' retaggio del C pre-ANSI.

Lo standard C89 si',
No, lo standard C89 lo impone.

 (cioe' se non specificato) e' proprio l'int?
il C89 si, ma il C99 ha eliminato questa caratteristica.
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

il C89 si, ma il C99 ha eliminato questa caratteristica.
Noneeeeee, anche il C89 impone l'uso del valore di ritorno.

 Noneeeeee, anche il C89 impone l'uso del valore di ritorno.
"... la funzione minimale e', infatti, la seguente:
        dummy() { }
[...] se viene omesso il tipo del valore di ritorno esso viene 
considerato automaticamente un int"
(B.W. Kernighan, D. Ritchie, "Linguaggio C - seconda edizione")


Noneeeeee, anche il C89 impone l'uso del valore di ritorno.
No, il C89 assume che se non specifichi diversamente la funzione
ritorni int (te ne accorgi anche dai warning o dagli errori che ti da'
il compilatore quando usi funzioni senza includere l'header giusto).
Nel rational del c99 e' espressamente detto che dal c99 in poi, al
contrario che nelle precedenti versioni, non c'e' piu' la deduzione
implicita del valore di ritorno delle funzioni.

(B.W. Kernighan, D. Ritchie, "Linguaggio C - seconda edizione")
Si', e' vero, scusate, e' l'abitudine al C++ che mi frega...

(B.W. Kernighan, D. Ritchie, "Linguaggio C - seconda edizione")
Aggiungo, comunque, giusto come appendice, di fare
attenzione quando si cita il K&R II in relazione allo
standard C89.  In questo caso i due concetti coincidono e vi
ringrazio di avermi corretto, ma molto spesso si trovano
incongruenze, dovute al fatto che il K&R II e' stato
pubblicato quando lo standard doveva ancora essere approvato
(vedi il cast sul ritorno di malloc(), etc..).

(vedi il cast sul ritorno di malloc(), etc..).
Hai ragione, ci sono delle correzioni da apportare:
http://cm.bell-labs.com/cm/cs/cbook/2ediffs.html
Le correzzioni non sono poi tantissime :)
Mox :)