Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Con la prima rete 5G Standalone attiva in Italia, WINDTRE compie un passo decisivo verso un modello di connettività intelligente che abilita scenari avanzati per imprese e pubbliche amministrazioni, trasformando la rete da infrastruttura a piattaforma per servizi a valore aggiunto
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-01-2014, 19:53   #1
Giupoz
Member
 
Iscritto dal: Jul 2013
Messaggi: 46
[c] Creare una classifica con dati letti da file

Ehi ragazzi, ho questo codice che, premetto, è funzionante.
In pratica in un gioco devo leggere dal file record.txt i nomi dei giocatori che hanno vinto e il numero di mosse impiegato per vincere.
Nel file i dati appaiono così
CARLO 20
GIONN 13 ecc...
Nel prendere i dati dal file funziona, e anche nello stamparli.
Però se in contemporanea volessi stilare una classifica in ordine decrescente dei giocatori che hanno impiegato il minor numero di mosse per vincere, il codice si blocca. Come devo risolvere????

Codice:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
	printf ("\n\t\t *** RECORD ***\n\n\n");
	printf ("%21s%21s","PLAYER", "TURNI\n\n");
	char name [7]; int i = 0; int k = 0;
	int mosse;
	int primo, secondo, terzo;
	char first [7], second [7], third [7];
	primo = 50; secondo = 50; terzo = 50;
	FILE *cfPtr;
if ((cfPtr = fopen ("record.txt", "r")) == NULL)
	{
		puts ("File could not be opened");
	}
	while (!feof (cfPtr))
		{
			fscanf (cfPtr, "%6s%d", name, &mosse);
			printf ("%d - %17s %19d\n", i++, name, mosse);
			if (mosse < primo)
				{	primo = mosse;
					k = 0;
					while  (k < 7)
						{
							third [i] = second [i];
							second [i] = first [i];
							first [i] = name [i];
							i++;
						}
				}
			else if ( (mosse > primo) && (mosse < secondo) )
				{	secondo = mosse;
					k = 0;
					while  (k < 7)
						{
							third [i] = second [i];
							second [i] = name [i];
							i++;
						}
				}
			else if ( (mosse > secondo) && (mosse < terzo) )
					{	terzo = mosse;
						k = 0;
						while  (k < 7)
						{
							third [i] = name [i];
							i++;
						}
				}
		}
	
	system ("pause");
}
Giupoz è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2014, 23:12   #2
gianmpu
Senior Member
 
Iscritto dal: Oct 2010
Messaggi: 1609
Codice:
while  (k < 7)
{
	third [i] = second [i];
	second [i] = first [i];
	first [i] = name [i];
	i++;
}
Questi sono tutti cicli infiniti perchè non aggiorni il valore di k che perciò resta sempre a 0 e non si esce mai dal ciclo while
Devi impostare le istruzioni come qualcosa del tipo
while (k++ .....)
Inoltre all'interno dei cicli while usi la variabile i senza inizializzarla quindi al secondo ciclo while in cui entri i ha un valore non corretto

Ultima modifica di gianmpu : 26-01-2014 alle 23:22.
gianmpu è offline   Rispondi citando il messaggio o parte di esso
Old 27-01-2014, 12:12   #3
bancodeipugni
Senior Member
 
L'Avatar di bancodeipugni
 
Iscritto dal: Nov 2013
Città: Nel cuore dell'8 Mile di Detroit
Messaggi: 3830
poi a me il feof() non piace, preferisco sempre in questi casi il comtrollo sulla read()

è anche una questione di portabilità
bancodeipugni è offline   Rispondi citando il messaggio o parte di esso
Old 27-01-2014, 18:20   #4
Giupoz
Member
 
Iscritto dal: Jul 2013
Messaggi: 46
Si scusate, sul file che ho io avevo già sostituito il i++ con k++, ma non va lo stesso....
Giupoz è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2014, 02:53   #5
gianmpu
Senior Member
 
Iscritto dal: Oct 2010
Messaggi: 1609
Quote:
Si scusate, sul file che ho io avevo già sostituito il i++ con k++, ma non va lo stesso....
Ok, ma se non pubblichi il codice modificato che hai scritto, per capire se ci sono altri errori oltre a quelli indicati, più che un programmatore ci vuole un indovino con la sua palla di cristallo.
gianmpu è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2014, 11:00   #6
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Codice:
if ((cfPtr = fopen ("record.txt", "r")) == NULL)
	{
		puts ("File could not be opened");
	}
	while (!feof (cfPtr))
Controlli che il file venga correttamente aperto. Ottimo!
Nel caso non venga aperto, lo segnali all'utente, pero'.... continui l'esecuzione e otterrai un crash. Non ti conviene, per esempio,terminare l'applicazione?

ciao
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2014, 11:54   #7
Giupoz
Member
 
Iscritto dal: Jul 2013
Messaggi: 46
avete ragione. Però parlando con i miei amici che hanno consegnato il progetto mi hanno consigliato, invece di ordinare i numeri nel file durante la stampa, di salvarli nel file già ordinati. Ciò significa che la funzione di salvataggio deve, oltre a scrivere, anche aprire il file e leggerlo, e andrà a scrivere il punteggio in maniera ordinata.
Quindi, se sul file c'è
Andrea 9
Giorgio 17
e il punteggio appena conseguito è 11, dovrà inserirlo tra Andrea e Giorgio. Come devo fare per farglielo capire?
Questo che sto usando adesso scrive soltanto, non ho idea di come farglielo l'ordinamento..

Codice:
void salva_record (int turno)
{	
	int mosse = 0;
	mosse = turno;
	char name [7];
	FILE *cfPtr;
	if ((cfPtr = fopen ("record.txt", "a")) == NULL)
		{
			puts ("\nFile could not be opened");
		}
	else {
		puts("enter player name:\t");
		puts ("Enter EOF to end input");	//CTRL+Z
		printf ("%6s", "?");
		scanf ("%6s", &name);
	}
	while (!feof (stdin))
		{
			fprintf (cfPtr, "%s %d\n", name, mosse);
			printf ("%s", "?");
			scanf ("%6s%d", name, &mosse);
		}
	fclose (cfPtr);
}
Giupoz è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2014, 12:31   #8
Giupoz
Member
 
Iscritto dal: Jul 2013
Messaggi: 46
Ragazzi ho trovato questo codice di ordinamento su file, come posso applicarlo al mio????? MI aiutate gentilmente? mi mancano 12 ore prima di consegnare il progetto
Codice:
#include <stdio.h>
#include <stdlib.h>

const int MAX = 1024;

void insert_sorted (long *sorted, int count, long value)

{

    int i = 0;

    sorted[count] = value;

   if (count == 0) return;

   for (i = count;i >= 0; i--) 

      {

            if (value < sorted[i-1])

            sorted[i] = sorted[i-1];

            else break;

      }

   sorted[i] = value;

      }

int main (int argc, char *argv[])

{

      FILE *infile = NULL;

      long sorted[1024];

      long value;

      int count = 0;

      int i = 0;

      if (argc < 2) {

      fprintf (stderr, "Usage : %s \n", argv[0]);

      return 1;

      }

   infile = fopen (argv[1], "r");

   if (NULL == infile) {

   perror ("fopen");

   return -1;

   }

/* while file not ends */

   while (!feof (infile)) {

   fscanf (infile, "%ld\n", &value); /* fetch value */

   insert_sorted (sorted, count, value); /* sort */

   ++count; /* increase number of sorted values */

   }

/* display values */

   printf ("Sorted values : ");

   for (i = 0; i < count; i++ ) {

   printf ("%ld ", sorted[i]);

   }

/* cleanup */

if (infile) {

fclose (infile);

infile = NULL;

}

return 0;

}
Giupoz è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
La missione con equipaggio Shenzhou-21 h...
Il Galaxy S26 Edge potrebbe essere ancor...
Google riaccenderà una centrale n...
Crollo per Pornhub nel Regno Unito:-77% ...
La Germania accende il suo cannone laser...
Il meglio di Amazon in 2 minuti: tira ar...
ECOVACS risponde a Eureka e dimezza il p...
Durissimo colpo per Nintendo: l'ufficio ...
Scope elettriche al minimo storico su Am...
Blue Jay e Project Eluna: robotica e AI ...
Scede a 949€ il Samsung Galaxy S25 Ultra...
Blue Yeti Nano in super offerta su Amazo...
Netflix sta preparando un'offerta per Wa...
Prezzo impossibile, è sceso ancor...
Torna il migliore dei mini PC economici:...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:42.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v