Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    [C]ricerca carattere in stringa

    codice:
    #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!!

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    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

    codice:
    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");
        }
    Tecnologia

  3. #3
    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!

  4. #4
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    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 ??
    Tecnologia

  5. #5
    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!!!

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Non ho capito qual'è il problema, spiegati meglio.

  7. #7
    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

  8. #8
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Cosa fai qua?

    codice:
    while(fgets(str,MAX,fp)!=NULL)
            sscanf(str,"%s %s %d %c",data,numero,&min,tipo);
    Stai continuando a leggere righe senza fermarti, perchè ?

  9. #9
    si leggo il file riga per riga

  10. #10
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.