Pagina 1 di 1

error : syntax error before '}' token

MessaggioInviato: 27/03/2015, 11:49
da gio88
salve sto facendo questo programma ed continuo ad essere bloccato da questo errore

error : syntax error before '}' token


all'altezza della terz'ultima parentesi graffa , dopo il while!
so che probabilmente è una stupidata ma non riesco a capire che errore di sintassi io faccia

#include <stdio.h>
#include <stdlib.h>

int main (){
int x[100] , y[100];
int i ,j, z , n;
z=0;

for (j=0 ; j<100 ; j++){
do{
if (j%2==0 && x[i]>=z){
printf("inserisci un valore:");
scanf("%d", &x[i]);
y[j]=y[x[i]];
printf ("y[%d]" ,y[j]);
}while (i<=50);
}}
}
return 0;


grazie in anticipo

Re: error : syntax error before '}' token

MessaggioInviato: 27/03/2015, 13:11
da vict85
Devi spostare il while al di fuori della graffa che lo segue e scrivere il return 0; prima della graffa che lo precede (oppure in questo caso eliminarlo del tutto, dato che è opzionale nel main).

Detto questo non hai inizializzato i, hai definito n ma non l'hai usato e il printf non stampa ciò che ritieni dovrebbe stampare.

Re: error : syntax error before '}' token

MessaggioInviato: 27/03/2015, 15:49
da vict85
Sergio ha scritto:Anche l'uso di scanf per immettere un intero da tastiera è pericoloso.


Seppur sia vero (o anche qui), non mi sembra il caso di essere troppo fiscali su questo aspetto. Anche perché queste problematiche sono un po' troppo legate ad un cattivo design della funzione scanf. In programmi di test e per leggere numeri, scanf è sufficientemente adeguato anche se l'uso di fgets/sscanf è sicuramente meglio (seppur non infallibile).

Comunque non era mia intenzione essere esaustivo nei problemi, di fatto c'è ben poco che abbia un senso in quel codice.

Re: error : syntax error before '}' token

MessaggioInviato: 27/03/2015, 17:01
da gio88
grazie per l'aiuto si , il codice è buttato un po' li , prima volevo risolvere il problema di sintassi poi i vari accorgimenti logici.

Re: error : syntax error before '}' token

MessaggioInviato: 27/03/2015, 17:02
da gio88
vict85 ha scritto:Devi spostare il while al di fuori della graffa che lo segue e scrivere il return 0; prima della graffa che lo precede (oppure in questo caso eliminarlo del tutto, dato che è opzionale nel main).

Detto questo non hai inizializzato i, hai definito n ma non l'hai usato e il printf non stampa ciò che ritieni dovrebbe stampare.



a dir la verità questa è una parte del programma ho lasciato solo le inizializzazioni , e ho messo solo la parte del programma che mi interessa gli array , n ecc... vengono utilizzati nella parte di programma che ho fatto prima e che non ho messo!

Re: error : syntax error before '}' token

MessaggioInviato: 27/03/2015, 18:23
da vict85
Sergio ha scritto:Punti di vista. Io invece credo che le prime cose che bisognarebbe imparare a fare sono funzioni per l'input di numeri di vario tipo e funzioni per verificare l'uguaglianza tra numeri in virgola mobile (cose come if (x == 0.0) dovrebbero essere vietate, forbidden, verboten).
E anche che bisognerebbe imparare fin dall'inizio a verificare sempre il valore ritornato dalle funzioni, come si consiglia anche nella seconda pagina che hai linkato.


Vi è un sostanziale problema in tutto ciò: sei costretto a presentare le funzioni di input prima di aver insegnato cosa sia una funzione. E questo perché l'applicazione deve sostanzialmente fornire informazioni all'utente in qualche modo. In un certo senso le problematiche del IO del C sono tra le ragioni per cui molti corsi universitari ora usano il C++ o meglio un C90+iostream :roll: .
Inoltre è difficile insegnare a costruire le funzioni di input senza di fatto saper programmare in C. Insomma scambi un punto di partenza con un punto di arrivo. Di fatto dovresti insegnare il C senza IO e poi insegnare l'IO ma questo è complicato. In questo i linguaggi interpretati hanno grossi vantaggi. L'uso di funzioni semplificate come suggerito nel link che hai messo è probabilmente un buon modo per farlo, ma io non spiegherei la loro implementazione a dei principianti. Inoltre un problema di quella implementazione è che per evitare l'uso dei puntatori (e quindi di quell'& malefico) non c'è modo per sapere se le funzioni hanno fallito. Inoltre forse a quel punto tanto vale usare il C++.
La questione dell'uguaglianza dei float la vedo come piuttosto secondaria, insomma puoi programmare tantissime cose senza aver bisogno di float o double. Quindi lo puoi introdurre anche molto tardi.

P.S.: Nel primo link che ho linkato, comunque, c'era un accenno al fatto che l'uso di fgets+sscanf condivideva alcuni difetti di scanf e che quindi fosse solo parzialmente meglio. Tra l'altro alcuni codici che trovi in giro sono fin troppo legati all'ASCII, invece di usare le funzioni appropriate contenute in ctype.h.

Re: error : syntax error before '}' token

MessaggioInviato: 27/03/2015, 18:25
da vict85
gio88 ha scritto:a dir la verità questa è una parte del programma ho lasciato solo le inizializzazioni , e ho messo solo la parte del programma che mi interessa gli array , n ecc... vengono utilizzati nella parte di programma che ho fatto prima e che non ho messo!


In futuro sarebbe meglio evitassi di eliminare dal tuo codice elementi essenziali per la corretta esecuzione del codice. Così facendo ci confondi e non ci permetti di capire lo scopo finale del codice che ci invii.

Già che ci sono ti invito a scrivere i codici nel tag
Codice:
[code]Il codice va qua dentro[/code]

Re: error : syntax error before '}' token

MessaggioInviato: 27/03/2015, 19:24
da vict85
Ci ho pensato dopo aver scritto il messaggio a presentare solo l'output e aspettare per l'input. Comunque sono anche io molto contrario all'insegnamento dell'input da tastiera. Anche perché al di là di tutti i problemi di scanf e similari, è un modo di inserimento piuttosto tedioso e non ti permette di lavorare con oggetti grossi. L'uso dei file, seppur leggermente più complesso da implementare, è un modo di inserimento molto più rapido. L'unico svantaggio di inizializzare le cose nel codice è che devi ricompilare tutte le volte, ma se usi un IDE lo noti a malapena.

Comunque un'altra cosa che non capisco come mai venga insegnata seppur non sia né comoda né necessaria, è di definire tutte le variabili all'inizio della funzione (che poi già nel C90 dovevi farlo all'inizio del blocco1). Insomma viene molto più naturale dire: "ho bisogno di una variabile quindi la definisco e la scrivo", invece di andare a cercare l'inizio della funzione e inserirlo. Anche perché poi aumenti il rischi di non inizializzare la variabile, dimenticarti di eliminarla o aggiungerla, sbagliare il tipo2 e cose di questo tipo.

Note

  1. Concetto che spesso tra l'altro passa un po' inosservato ai principianti.
  2. per esempio potresti avere una variabile intera che con il tempo decidi di farla diventare un float e dimenticarti di cambiare la definizione all'inizio della funzione

Re: error : syntax error before '}' token

MessaggioInviato: 30/03/2015, 09:46
da apatriarca
Sinceramente credo che il problema sia molto più profondo rispetto all'insegnamento o meno di scanf o altre funzioni. C'è spesso l'impressione che la maggior parte dei professori dei primi corsi di programmazione (almeno quelli degli studenti che cercano aiuto nei forum) non siano davvero in grado di programmare e non lo fanno mai. Forse insegnano in un linguaggio che non usano o forse è solo pigrizia (ripropongono lo stesso corso da una decina di anni perché non hanno mai avuto voglia di cambiarlo), ma di certo non è una buona scusa per insegnare tutte le cattive abitudini che ci sono nei loro corsi.