error : syntax error before '}' token

Messaggioda gio88 » 27/03/2015, 11:49

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
gio88
Junior Member
Junior Member
 
Messaggio: 153 di 392
Iscritto il: 14/09/2010, 10:56

Re: error : syntax error before '}' token

Messaggioda vict85 » 27/03/2015, 13:11

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.
vict85
Moderatore
Moderatore
 
Messaggio: 7586 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: error : syntax error before '}' token

Messaggioda vict85 » 27/03/2015, 15:49

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.
vict85
Moderatore
Moderatore
 
Messaggio: 7588 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: error : syntax error before '}' token

Messaggioda gio88 » 27/03/2015, 17:01

grazie per l'aiuto si , il codice è buttato un po' li , prima volevo risolvere il problema di sintassi poi i vari accorgimenti logici.
gio88
Junior Member
Junior Member
 
Messaggio: 154 di 392
Iscritto il: 14/09/2010, 10:56

Re: error : syntax error before '}' token

Messaggioda gio88 » 27/03/2015, 17:02

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!
gio88
Junior Member
Junior Member
 
Messaggio: 155 di 392
Iscritto il: 14/09/2010, 10:56

Re: error : syntax error before '}' token

Messaggioda vict85 » 27/03/2015, 18:23

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.
vict85
Moderatore
Moderatore
 
Messaggio: 7589 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: error : syntax error before '}' token

Messaggioda vict85 » 27/03/2015, 18:25

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]
vict85
Moderatore
Moderatore
 
Messaggio: 7590 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: error : syntax error before '}' token

Messaggioda vict85 » 27/03/2015, 19:24

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
vict85
Moderatore
Moderatore
 
Messaggio: 7592 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: error : syntax error before '}' token

Messaggioda apatriarca » 30/03/2015, 09:46

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.
apatriarca
Moderatore
Moderatore
 
Messaggio: 3750 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite