13/02/09 13:05
theprogrammer
Ci fai vedere come lo hai dichiarato ?
aaa
26/02/09 16:07
Cesaruz
Ho messo il codice del semplice progetto che sto facendo...consiste nell'organizzare un torneo a tre gironi utilizzando le funzioni ed una scomposizione del problema del tipo top down...
In questo progettino quindi c'è una funzione che si chiama "AcquisisciNomiSquadre" dove appunto acquisisco i nomi delle squadre che partecipano al torneo in question...I nomi delle squadre come ovvio sono delle stringhe e quindi vorrei che quando l'utente per "sbaglio" non inserisce neanche un carattere gli esca un messaggio che lo avvisi dell'errore commesso e glie la faccio reinserire... però ho un problema con la gets() perchè solo la prima volta che entra nel ciclo,contenuto nella funzione, non mi fa inserire nulla e va direttamente nel ciclo di controllo avvisandomi quindi che non ho inserito nulla...
Ecco questo è il problema che non riesco a capire...
Spero di essermi spiegato...
Ti ringrazio anticipatamente
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
//#include <conio.h>
int G[50];
char s[50][128];
//Bubble sort
void BubbleSort(int q)
{
int i;
int j;
int tmp=0;
char str[128];
for (i = (q - 1); i >= 0; i--){
for (j = 1; j <= i; j++){
if(G[j-1]<G[j]){
tmp=G[j-1];
G[j-1]=G[j];
G[j]=tmp;
strncpy(str,s[j-1],15);
strncpy(s[j-1],s[j],15);
strncpy(s[j],str,15);
}
}
}
}
//Acquisisco i punteggi
void AcquisisciPunti(int q)
{
int i;
for(i=0;i<q;i++){
printf("Inserire punteggio della squadra %s ",s[i]);
printf("---> ");
while((0==scanf("%d",&G[i]))||(G[i]<0)){
char buf[150];
gets(buf);
printf("Attenzione il punteggio inserito non è accettabile:SI PREGA DI REINSERIRLO\n");
printf("-->");
}
}
}
//Acquisisco i nomi delle squadre
void AcquisisciNomiSquadre(int q)
{
int i;
char str;
for(i=0;i<q;i++){
printf("Inserire nome della squadra numero %d ", i+1);
printf("-->");
gets(s[i]);
while(strcmp(s[i],"")==0){
putchar('\a');
printf("Attenzione il nome non è stato inserito corretamente: SI PREGA DI REINSRIRE\n");
gets(s[i]);
}
}
}
//Visualizzazzione
void Visualizza(int q)
{
int i;
for(i=0;i<q;i++){
printf("Squadra %s punteggio %d\n",s[i],G[i]);
}
}
//Main
int main()
{
int q=0;
int i=0;
char risp[5];
do{
printf("Quante squadre partecipano alle olimpiadi\n");
//scanf("%ld",&q);
printf("--->");
while((0==scanf("%d",&q))||(q<=0)||(q>50)||(q<8)){
char buf[150];
gets(buf);
printf("Attenzione non è stata inserita correttamente la quantità : SI PREGA DI REINSERIRLA\n");
printf("--->");
}
AcquisisciNomiSquadre(q);
putchar('\n');
for(i=0;i<3;i++){
printf("Inserire punti che le squadre hanno ottenuto al %d° girone\n", i+1);
AcquisisciPunti(q);
BubbleSort(q);
if(i==0){
q=8;
}else{
q=4;
}
printf("Squadre passate al %d° girone\n",i+2);
Visualizza(q);
putchar('\n');
}
printf("Squadre vincitrici\n");
Visualizza(3);
putchar('\n');
printf("La Squdra %s vince la medaglia d'oro con un punteggio di %d punti\n",s[0],G[0]);
printf("La Squdra %s vince la medaglia d'argento con un punteggio di %d punti\n",s[1],G[1]);
printf("La Squdra %s vince la medaglia di bronzo con un punteggio di %d punti\n",s[2],G[2]);
putchar('\n');
printf("Ci sono altre olimpiadi dell'intelligenza? (S/N)");
gets(risp);
}while(strcmp(risp,"S")==1);
}
Ultima modifica effettuata da Cesaruz 26/02/09 16:10
aaa
26/02/09 16:10
theprogrammer
Postato originariamente da Cesaruz:
Ho allegato il file ...
Quale file?
EDIT: visto ... abbiamo postato insieme ...
Inserisci nel ciclo di acquisizione una fflush(stdin) ... ovvero
printf("-->"
;
fflush(stdin);
gets(s[i]);
Ultima modifica effettuata da theprogrammer 26/02/09 16:22
aaa
05/03/09 9:48
theprogrammer
Ma usi Linux e gcc?
Ultima modifica effettuata da theprogrammer 05/03/09 9:49
aaa