|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 139
|
cosa ho sbagliato?
Allora vi posto il programma che ho scritto, in pratica esso prende da linea di comando tre valori e da input altri 4 per volta fino a che uno non inserisce una riga vuota.
Il problema è che anche inserendo una linea vuota non esce dal programma e che anche facendo partire il programma da linea da comando con i dati necessari mi chiede solo una volta di inserire i dati e poi si pianta... #include <stdio.h> #include <stdlib.h> char colori[20]; float dimoriz[20],dimvert[20],dim[20],costo[20],costocolore[5],dimparz,costoparz,dimtot,costotot,costomedio; int a,b,c; int main(int argc, float *argv[4]) { a=0; do { printf("\n Inserire colore, dim orizzontale e verticale in questo ordine separate da uno spazio (i colori ammessi sono N=nero, B=bianco, V=verde,G=giallo)per uscire premeresemplicemnte invio\n"); scanf("%c%f%f",&colori[a],&dimoriz[a],&dimvert[a]); if (dimoriz[a]<0 || dimvert[a]<0 || colori[a] != 'n' || colori[a] != 'b'|| colori[a] != 'v'|| colori[a] != 'g') { fprintf(stderr, "si e' verificato un errore alla linea %d",a); } else { for(b=0;b<=a;b++) { if ( tolower(colori[b]) == 'n' ) { dim[b]=(dimoriz[b] * dimvert[b]); costo[b]=(dim[b] / 4)* strtol(argv[1], NULL, 0); } else { if ( tolower(colori[b]) == 'b' ) { dim[b]=(dimoriz[b] * dimvert[b]); costo[b]=(dim[b] / 4)* strtol(argv[2], NULL, 0); } else { if ( tolower(colori[b]) == 'v' ) { dim[b]=dimoriz[b]* dimvert[b]; costo[b]=(dim[b] / 4)* strtol(argv[3], NULL, 0); } else { if ( tolower(colori[b]) == 'g' ) { dim[b]=dimoriz[b] * dimvert[b]; costo[b]=(dim[b] / 4)* strtol(argv[4], NULL, 0); } } } } } } a++; }while(colori[a-1]!='\0'); dimparz=0; costoparz=0; for (c=0;c<=a;c++) { dimtot=dimparz+dim[c]; costotot=costoparz+costo[c]; } costomedio=costotot/dimtot; printf("\nArea Totale : %f",dimtot); printf("\nCosto totale : %f", costotot); printf("\nCosto medio : %f",costomedio); return (0); } Ultima modifica di thessdd : 04-12-2006 alle 17:08. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 139
|
cioè dovrei scrivere
char buffer [10] fgets(buffer, 10, stdin); sscanf(buffer,"%c %f %f",&colore[a],&dimvert[a],&dimoriz[a]); scusate ma n sono pratico di queste funzioni provando ho notato che anche inserendo una riga vuota continua a chiedere input.... Ultima modifica di thessdd : 04-12-2006 alle 17:18. |
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 139
|
allora ho fatto un ciclo do while che inizia così
printf("\n Inserire colore, dim orizzontale e verticale in questo ordine separate da uno spazio (i colori ammessi sono N=nero, B=bianco, V=verde,G=giallo)per uscire premeresemplicemente invio\n"); fgets(buffer, 30, stdin); sscanf(buffer,"%c %f %f",&colori[a],&dimvert[a],&dimoriz[a]); if (dimoriz[a]<0 || dimvert[a]<0 || tolower(colori[a]) != 'n' || tolower(colori[a]) != 'b' || tolower(colori[a]) != 'v' || tolower(colori[a]) != 'g' || colori[a] != '\n') { fprintf(stderr, "si e' verificato un errore alla linea %d",a); } poi ci sono le istruzioni e alla fine }while(colori[a] != '\n'); il problema è che ora mi da errore anche se scrivo ad esempio n 30 25 che dovrebbe accettare senza scrivere errori.... |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Dopo la fgets devi testare se buffer[0] != '\n' e in tal caso continui con la sscanf, altrimenti esci.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 139
|
ogni volta ne esce una nuova...
#include <stdio.h> #include <stdlib.h> char colori[20]; float dimoriz[20],dimvert[20],dim[20],costo[20],costocolore[5],dimparz,costoparz,dimtot,costotot,costomedio; int a,b,c; char buffer[30]; int main(int argc, float *argv[4]) { for(a=0;a<100;a++) { printf("\n Inserire colore, dim orizzontale e verticale in questo ordine separate da uno spazio (i colori ammessi sono N=nero, B=bianco, V=verde,G=giallo)per uscire premeresemplicemnte invio\n"); fgets(buffer, 30, stdin); if(buffer[0] != '\n') { sscanf(buffer,"%c %f %f",&colori[a],&dimvert[a],&dimoriz[a]); if (dimoriz[a]<0 || dimvert[a]<0 || tolower(colori[a]) != 'n' || tolower(colori[a]) != 'b' || tolower(colori[a]) != 'v' || tolower(colori[a]) != 'g' ) { fprintf(stderr, "si e' verificato un errore alla linea %d",a); } else { for(b=0;b<=a;b++) { if ( tolower(colori[b]) == 'n' ) { dim[b]=(dimoriz[b] * dimvert[b]); costo[b]=(dim[b] / 4)* strtol(argv[1], NULL, 0); } else { if ( tolower(colori[b]) == 'b' ) { dim[b]=(dimoriz[b] * dimvert[b]); costo[b]=(dim[b] / 4)* strtol(argv[2], NULL, 0); } else { if ( tolower(colori[b]) == 'v' ) { dim[b]=dimoriz[b]* dimvert[b]; costo[b]=(dim[b] / 4)* strtol(argv[3], NULL, 0); } else { if ( tolower(colori[b]) == 'g' ) { dim[b]=dimoriz[b] * dimvert[b]; costo[b]=(dim[b] / 4)* strtol(argv[4], NULL, 0); } } } } } } } else { dimparz=0; costoparz=0; for (c=0;c<=a;c++) { dimtot=dimparz+dim[c]; costotot=costoparz+costo[c]; } costomedio=costotot/dimtot; printf("\nArea Totale : %f",dimtot); printf("\nCosto totale : %f", costotot); printf("\nCosto medio : %f",costomedio); } return (0); } questo è il programma finito, sembra funzionare tutto se non fosse che quando lo compilo mi dice syntex error at the end of input all'ultima riga... un altra cosa sarebbe meglio un ciclio while al posto del for? |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Inoltre invece di fare: Codice:
if (...)
{
}
else
{
if (...)
{
}
}
Codice:
if (...)
{
}
else if (...)
{
}
else if (....)
......
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:30.



















