PDA

Visualizza la versione completa : [C]ricerca carattere in stringa


jonnyforever
23-01-2012, 17:25
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 30
#define MAX 50
int main(int argc,char*argv[])
{
FILE*fp;
char str[MAX];
char data[9];
char numero[21];
int min,min1,min2,i, sume,sumu;
char tipo[2];
char data1[9];
char data2[9];
if(argc!=2)
{
printf("errore\n");
return -1;
}
fp=fopen(argv[1],"r");
if(fp==NULL)
{

printf("file %s vuoto\n",argv[1]);
return -2;
}
printf("inserisci le due date:\n");
scanf("%s %s",data1,data2);

sume=0;
sumu=0;

while(fgets(str,MAX,fp)!=NULL)
sscanf(str,"%s %s %d %c",data,numero,&min,tipo);



for(i=0;i<MAX;i++){
if(strcmp(str,data1))
{
if(str=='E')
{

sume+=min;
min1=min;
}
}
else
if (strcmp(str,data2))
{
if(str=='U')
{
sumu+=min;
min2=min;
}
}


else
printf("errore\n");
}
fclose(fp);
printf("%s - Entrata: %d minuti - Uscita: %d minuti\n",numero,min1,min2);
printf("%s - Entrata: %d minuti - Uscita: %d minuti\n",numero,min1,min2);
return 0;
}


dato il seguente codice non riesco a visualizzare la somma dei minuti in Uscita (U) e dei minuti in entrata (E) del seguente tabulato.txt

20110701 345677770 30 U
20110603 02345678 10 U
20110704 345677770 30 U
20110701 345677770 18 U
20110702 011345345 20 E
20110703 338767676 90 U

che per esempio io do in input
Inserire le due date:

20110701 20110702

e in output ho:

345677770 – Entrata: 0 minuti - Uscita: 48 minuti
011345345 – Entrata: 20 minuti - Uscita: 0 minuti
cioè somma dei minuti di quei numeri compresi fra due date.
ho lanciato il codice ma mi esce solo uil tabulato dell ultimo numero e come minuti in E o in U numeri altissimi!!

torn24
23-01-2012, 18:04
non mi è chiaro quando confronti con strcpy la stringa del file con la data ,
e sempre con strcpy la stringa del file con il tipo ???

non è che volevi fare una cosa del genere



for(i=0;i<MAX;i++){
if(strcmp(data,data1))
{
if(tipo=='E')
{

sume+=min;
min1=min;
}
}
else if (strcmp(data,data2))
{
if(tipo=='U')
{
sumu+=min;
min2=min;
}
}


else
printf("errore\n");
}

jonnyforever
23-01-2012, 18:12
ok perchè io vorrei trovare nella riga il carattere 'U' o 'E' e poi sommare i minuti di U e di E per i due diversi numeri che sono compresi tra le due date in input!

torn24
23-01-2012, 18:32
Con sscanf() hai tutti i dati necessari ricavati dalla stringa nel file.
A occhio mi sembra un programma semplice , ma non si riesce a capire cosa tu voglia
fare effettivamente.

se ti spieghi meglio descrivendo cosa vuoi fare credo che si risolve in un attimo.

prova a postare il testo come sarebbe da file
le due date date in input
e l' output in uscita corretto come dovrebbe essere
e dire con i numeri compresi tra data e tipo U E cosa ci devi fare ??

jonnyforever
23-01-2012, 23:09
sei un grande torn24 se riesci a farmi capire questo ( ti ho risp in pvt) nn so come ringraziarti!! perchè poi molti temi sono cosi ...bisogna lavorare sulle righe..so che mi puoi aiutare GRAZIE!!!

ramy89
23-01-2012, 23:27
Non ho capito qual'è il problema, spiegati meglio.

jonnyforever
23-01-2012, 23:40
Il programma riceve da tastiera due date, nel formato YYYYMMDD, e deve visualizzare sullo schermo, per ciascun numero telefonico con il quale ci sia stata almeno una telefonata tra le due date, il totale dei minuti in entrata e il totale dei minuti in uscita nel periodo compreso tra le due date.
Ad esempio, se il file è quello mostrato prima:
C:\> PROG.EXE tabulato.txt
Inserire le due date:
20110701 20110702
345677770 – Entrata: 0 minuti - Uscita: 48 minuti
011345345 – Entrata: 20 minuti - Uscita: 0 minuti

ramy89
24-01-2012, 00:21
Cosa fai qua?



while(fgets(str,MAX,fp)!=NULL)
sscanf(str,"%s %s %d %c",data,numero,&min,tipo);


Stai continuando a leggere righe senza fermarti, perchè ?

jonnyforever
24-01-2012, 00:23
si leggo il file riga per riga

ramy89
24-01-2012, 00:27
Leggi il file riga per riga ma ogni lettura di una riga nuova sovrascrive quello che avevi letto prima.Devi fermarti ad analizzare i dati letti dentro a quel while (dove leggi le righe), non dopo il while.

Loading