View Full Version : [C] Come estrarre dati da file.txt con stringhe separate dal carattere + ("più") ?
Disperato7
09-06-2017, 21:58
Sono disperato! Sto svolgendo questo esercizio in C e devo prelevare i dati, come nell'esempio che vedete, ma vi è quel + in mezzo ai piedi. Avevo pensato ad una fscanf o carattere per carattere, ma non sono come fare. Qualcuno potrebbe farmi un esempio basato sull'esercizio che vi ho postato? Le funzioni le dovrei saper svolgere, il mio problema è prelevare correttamente i dati e salvarli nella struttura dati (LISTA).
Ecco l'esercizio: https://www.dropbox.com/s/8gjtdxm6fbbtx9j/Esercizio.jpg?dl=0
P.S. Sono veramente disperato e ringrazio di cuore chiunque mi possa dare una mano, grazie!
Ciao e benvenuto nel forum di hwupgrade.
Come ti spiegheranno anche altri, da regolamento è vietato risolvere completamente gli esercizi dati ad altri.
Al massimo si può correggere quello che hai già scritto tu.
Comunque, se il tuo problema è la lettura dal file skippando il +, la prima cosa che mi viene in mente è un semplice ciclo del tipo
do
{
leggo un carattere dal file
IF carattere <> + lo aggiungo ad una stringa
}
while carattere <> +
Disperato7
10-06-2017, 20:44
Studiando online ho trovato la funzione strtok che mi spezzetta le stringhe dai + (più).
Adesso devo acquisire dal file "liste.txt" i dati e faccio così#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 30
#define MAX_LINE 512
struct candidato {
char cognome [MAX];
char nome[MAX];
char partito[MAX];
int voti;
struct candidato *pun; };
int main(int argc, char *argv[])
{
int scelta,i,j,n,righe,uscita; char buff[900]; int elettori; char k;
struct candidato*candidati; struct fittizia*buf; int*p;
FILE *fp;
fp=fopen("liste.txt", "r");if(fp==NULL){ //uscita con exit() segnalando al s.o. con exit(1) che è avvenuto un errore
printf("\n\nsi e' verificato un errore relativo al file----errore---clicca un pulsante per uscire");
scanf("%d", &uscita);
exit(1);}
char buffer[MAX_LINE];
for (n = 1; fgets(buffer, MAX_LINE, fp); n++) {
printf("Linea %d => %s", n, buffer);
char *str = strtok(buffer, "+");
do {
printf ("%s\n", str);
} while (str = strtok(NULL, "+"));
}
Come faccio ad inserire il tutto nella lista struct candidato? Grazie a chiunque mi aiuti
tomminno
12-06-2017, 09:04
A questo punto il problema non è più come splittare una stringa per il carattere '+', ma studiare come funziona lo scope delle variabili, l'allocazione di memoria del C e la gestione delle liste.
Una volta studiati questi 3 elementi è banale risolvere l'esercizio.
Disperato7
13-06-2017, 12:14
A questo punto il problema non è più come splittare una stringa per il carattere '+', ma studiare come funziona lo scope delle variabili, l'allocazione di memoria del C e la gestione delle liste.
Una volta studiati questi 3 elementi è banale risolvere l'esercizio.
Ho studiato quanto tu dici, ma ho difficoltà ad applicarlo. Visto che dici che è così banale potresti farmi un esempio su questo esercizio? Grazie.
tomminno
13-06-2017, 14:33
Ho studiato quanto tu dici, ma ho difficoltà ad applicarlo. Visto che dici che è così banale potresti farmi un esempio su questo esercizio? Grazie.
Quindi visto che sai come si alloca la memoria in C devi:
1)allocare il primo elemento della lista.
2)copiare le stringhe lette in input sulle relative variabili della struct
3)Allocare il secondo elemento della lista
4)copiare le stringhe ...
...
Quindi rispondi a queste domande:
1)Come alloco il primo elemento della lista?
2)come faccio la copia di una stringa in C?
E' tutto quello che ti serve per risolvere l'esercizio, se veramente l'hai studiato è semplice.
Disperato7
13-06-2017, 17:47
Guarda ti invio il codice per l'inserimento ordinato di un intero in una lista
struct elemento *inserimento(struct elemento *p)
{
struct elemento *p0, *p1;
int posizione;
/* Creazione elemento */
p0 = (struct elemento *)malloc(sizeof(struct elemento));
printf("\nInserire l'informazione (un numero intero): ");
scanf("%d", &p0->inf);
if(p==NULL) { /* se la lista è vuota, l'elemento */
p = p0; /* diventa il primo e unico della lista */
p->pun = NULL;
}
else {
if(p->inf > p0->inf) { /* se il valore dell'elemento è */
p0->pun = p; /* inferiore al primo l'elemento */
p = p0; /* diventa il primo della lista */
}
else { /* ricerca della posizione di inserimento */
p1 = p;
posizione = 0;
while(p1->pun!=NULL && posizione!=1) {
if(p1->pun->inf < p0->inf)
p1 = p1->pun; /* scorre in avanti p1 */
else
posizione = 1; /* interrompe lo scorrimento */
}
p0->pun = p1->pun; /* connessione all'elemento successivo */
p1->pun = p0; /* connessione dall'elemento precedente */
}
}
return(p); /* ritorno del puntatore all'inizio della lista */
}
Ed infine ti dico che copiare una stringa lo si fa con strcpy che si trova in string.h
Ma non so andare avanti perchè se hai visto l'esercizio, poi mi perdo quando devo scansionare tutta la lista alla ricerca dei voti o dei partiti da conteggiare per le funzioni da creare per l'esercizio. Come devo fare?
tomminno
13-06-2017, 21:01
Risolvi un problema alla volta, prima costruisci la lista e solo poi vedremo il problema della ricerca.
Quel codice di inserimento in lista non è sufficientemente generico da essere applicato senza modifiche al tuo caso.
Scrivi del codice attinente al tuo esercizio invece di copiare pezzi di codice a caso ;)
Disperato7
15-06-2017, 15:17
Ma una curiosità? Ma voi vi divertite a perculare chi vi chiede un cavolo di aiuto? Perchè ho notato che nei forum, preferiscono tirarla per le lunghe o insultare come hai fatto tu con il "Codice a caso" o con il classico tono "Io sono Bill Gates, quindi ti tratterò come una scimmia".
Un piffero di aiuto cercavo ed invece sempre che il brodo si allunga e mi devo sorbire pure gli insulti.
tomminno
15-06-2017, 16:13
Ma una curiosità? Ma voi vi divertite a perculare chi vi chiede un cavolo di aiuto? Perchè ho notato che nei forum, preferiscono tirarla per le lunghe o insultare come hai fatto tu con il "Codice a caso" o con il classico tono "Io sono Bill Gates, quindi ti tratterò come una scimmia".
Un piffero di aiuto cercavo ed invece sempre che il brodo si allunga e mi devo sorbire pure gli insulti.
Non è perculare, ti stavo guidando nella risoluzione dell'esercizio. Ti ho illustrato l'algoritmo da applicare per risolverlo, dato che hai dichiarato tu stesso di aver studiato tutti gli argomenti necessari a risolverlo.
Invece rispondi con un pezzo di codice copiato da qualche altro esercizio che non è applicabile al caso in questione. Potevi almeno fare uno sforzo e modificarlo in modo che facesse un inserimento in una lista di "candidato" invece che di "elemento" :read:
In realtà pare proprio che tu non abbia studiato granchè e qui gli esercizi non si risolvono come da regolamento.
Disperato7
15-06-2017, 19:47
no, tu cercavi qualcuno che ti risolvesse l'esercizio e ti desse il codice con cui fare copia e incolla. e' gia' tanto che qualcuno ti abbia risposto dato che questo non e' un help desk, non e' CEPU, non e' grandi scuole, non e' qualcuno che ti faccia ripetizioni a gratis.
se sei cosi' disperato apri il libro e studia.
Vaffancetera ho studiato una dozzina di manuali, ma affrontano tutto con array o cretinate simili, fenomeno quindi prima di parlare aziona il cervello!
Disperato7
15-06-2017, 19:49
Non è perculare, ti stavo guidando nella risoluzione dell'esercizio. Ti ho illustrato l'algoritmo da applicare per risolverlo, dato che hai dichiarato tu stesso di aver studiato tutti gli argomenti necessari a risolverlo.
Invece rispondi con un pezzo di codice copiato da qualche altro esercizio che non è applicabile al caso in questione. Potevi almeno fare uno sforzo e modificarlo in modo che facesse un inserimento in una lista di "candidato" invece che di "elemento" :read:
In realtà pare proprio che tu non abbia studiato granchè e qui gli esercizi non si risolvono come da regolamento.
Algoritmo?
A voce pure io lo so dire cosa devo fare, e l'avrei saputo dire anche senza studiare il C o altri linguaggi, ma usando solo il cervello.
Mi avete stufato, fancetera, vi credete fenomeni ma non lo sapete fare neanche voi.
Disperato7
15-06-2017, 19:51
no, tu cercavi qualcuno che ti risolvesse l'esercizio e ti desse il codice con cui fare copia e incolla. e' gia' tanto che qualcuno ti abbia risposto dato che questo non e' un help desk, non e' CEPU, non e' grandi scuole, non e' qualcuno che ti faccia ripetizioni a gratis.
se sei cosi' disperato apri il libro e studia.
Sei talmente ignorante che scrivi "a gratis", si scrive solo "gratis". Studia tu piuttosto, CAPRA !!!
tomminno
16-06-2017, 08:48
Algoritmo?
A voce pure io lo so dire cosa devo fare, e l'avrei saputo dire anche senza studiare il C o altri linguaggi, ma usando solo il cervello.
Mi avete stufato, fancetera, vi credete fenomeni ma non lo sapete fare neanche voi.
Allora se l'algoritmo lo sai, sai come si inserisce un elemento in lista, sai come si copia una stringa in C, come mai non sai fare quello che dici di saper fare???
Facciamo così prima posta la tua soluzione corretta dell'esercizio che poi io ti posto la mia, vediamo chi non lo sa fare :sofico:
Disperato7
17-06-2017, 14:25
LOL. :asd: . Quindi fammi capire, la gente ti aiuta e perde il suo tempo per te gratuitamente e tu la mandi a quel paese? :asd: Proprio una strategia perfetta per farsi aiutare in futuro...
Ti auguro 3 anni di disgrazie!
Disperato7
17-06-2017, 14:26
Allora se l'algoritmo lo sai, sai come si inserisce un elemento in lista, sai come si copia una stringa in C, come mai non sai fare quello che dici di saper fare???
Facciamo così prima posta la tua soluzione corretta dell'esercizio che poi io ti posto la mia, vediamo chi non lo sa fare :sofico:
Ti auguro 3 anni di disgrazie!
Disperato7
17-06-2017, 14:28
bravo, si vede che sei portato per le lettere ma non per l'informatica allora.
PS per approfondire, con i tuoi amici dell'accademia della crusca: http://www.accademiadellacrusca.it/it/lingua-italiana/consulenza-linguistica/domande-risposte/gratis-addirittura-gratis
Ti auguro 3 anni di disgrazie!
Ma una curiosità? Ma voi vi divertite a perculare chi vi chiede un cavolo di aiuto? Perchè ho notato che nei forum, preferiscono tirarla per le lunghe o insultare come hai fatto tu con il "Codice a caso" o con il classico tono "Io sono Bill Gates, quindi ti tratterò come una scimmia".
Un piffero di aiuto cercavo ed invece sempre che il brodo si allunga e mi devo sorbire pure gli insulti.
Vaffancetera ho studiato una dozzina di manuali, ma affrontano tutto con array o cretinate simili, fenomeno quindi prima di parlare aziona il cervello!
Algoritmo?
A voce pure io lo so dire cosa devo fare, e l'avrei saputo dire anche senza studiare il C o altri linguaggi, ma usando solo il cervello.
Mi avete stufato, fancetera, vi credete fenomeni ma non lo sapete fare neanche voi.
Sei talmente ignorante che scrivi "a gratis", si scrive solo "gratis". Studia tu piuttosto, CAPRA !!!
Ti auguro 3 anni di disgrazie!
Ti auguro 3 anni di disgrazie!
Ti auguro 3 anni di disgrazie!
Hai anche lacune di educazione e rispetto oltre che di programmazione ed uso di un forum nel rispetto delle sue regole
utente ovviamente bannato
CLOSED!!
>bYeZ<
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.