Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    15

    Linguaggio C - Prelevare serie di numeri da stringhe acquisite da file

    Salve, come da titolo avrei un problema...

    ho un file con all'interno i seguenti dati da acquisire :

    codice:
    3    + 9
            4   *        2
         123     -     27
    messi così in modo casuale. Li ho acquisiti e memorizzati in array di stringhe, ognuna delle quali contiene una riga (ho usato questo tipo di acquisizione perché il compito richiedeva di farlo in questo modo). Adesso il mio problema è che devo creare una funzione
    codice:
    void Esegui_Operazioni(char [][NCAR], int [], int);
    che "...prende in ingresso la matrice di char contenente le operazioni, il
    vettore di interi destinato a contenere i risultati di ogni operazione e il numero di operazioni (righe
    della matrice) da effettuare. Effettua le operazioni, determinando il primo operando, l'operazione
    e il secondo operando (si deve effettuare una conversione da ascii a numerico) e immagazzina il risultato nel vettore dei risultati."

    Ecco ciò che mi è uscito fuori :

    codice:
    void Esegui_Operazioni(char str[][NCAR], int r[], int n)
    {
        int i=0,j=0;
        int op1=0,op2=0, opr=0;
        char *temp1,*temp2;
        
        for(i=0;i<=n-1;i++){
          
            op1=0; 
            op2=0; 
            opr=0;
            for(i=0;i<=n-1;i++){
          
            op1=0; 
            op2=0; 
            opr=0;
            for(j=0;j<NCAR;j++){
                
                if(isdigit(str[i][j])!=0){
                     if(op1!=0 && op2==0){
                        op2=str[i][j]-48;
                    }else{
                        if(op1==0 && op2==0){
                        op1=str[i][j]-48;
                        }
                    }
                }
                if(str[i][j]==45 || str[i][j]==42 || str[i][j]==47 || str[i][j]==43){
                opr=str[i][j];    
                }
            }
            if(opr==43){
                r[i]=op1+op2;
                }else{
                if(opr==45){
                    r[i]=op1-op2;
                }else{
                    if(opr==42){
                        r[i]=op1*op2;
                        }else{
                        if(opr==47){
                            r[i]=op1/op2;
                            }
                        }
                    }
                }
            //printf("       opr=%d op1=%d op2=%d\n",opr,op1,op2);
        }
    }
    }
    Il problema viene fuori quando c'è da acquisire dalle stringhe un numero con più di 1 cifra (come è logico che sia da come ho scritto il codice), vorrei sapere, se è possibile, un vostro parere su come acquisire i numeri 123 e 27 nell'ultima stringa...

  2. #2
    usa la funzione atoi() per convertire una stringa in intero
    codice:
    #include <stdio>
    #include <stdlib>
    #include <string.h>
    ...
    
    int Esegui_Operazioni(char *str )
    {
        int result = 0;
        int right  = 0;
        int left   = atoi( str );
        
        char *op = strpbrk( str, "+-*/" );
        char operator = *op;
        
        if( op == NULL )
            return NULL;
        
        right = atoi( op+1);
        printf("str  = \"%s\"\n", str );
        printf("eval = %d %c %d\n", left, operator, right );
        
        switch( operator )
        {
            case '+':
                result = left + right;
            break;
            case '-':
                result = left - right;
            break;
            case '/':
                result = left / right;
            break;
            case '*':
                result = left * right;
            break;
        }
        return result;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    15
    Davvero grazie mille, finalmente ! Avevo cercato questa funzione, ma sul mio manuale non c'è e su internet non avevo capito come usarla, sei stato gentilissimo

  4. #4
    Cercare codice già scritto può semplificare la vita, ma è molto più divertente e soddisfacente scriverlo da soli
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  5. #5
    @brizioss: tra parentesi, non scrivere i codici ASCII nel codice, è molto più semplice e chiaro usare i literal di tipo char (racchiusi tra apici singoli), come fa Samuele nel codice che ha postato.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ad essere pignoli

    if(right != 0) result = left / right;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Giusto, il division by zero non è buona cosa
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  8. #8
    Ad essere ancora più pignoli...
    codice:
    else {
        puts("Division by zero!");
        exit(1);
    }
    Ultima modifica di MItaly; 30-05-2015 a 18:27
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    15
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    @brizioss: tra parentesi, non scrivere i codici ASCII nel codice, è molto più semplice e chiaro usare i literal di tipo char (racchiusi tra apici singoli), come fa Samuele nel codice che ha postato.
    Siccome sono alle prime esperienze con questo linguaggio, potresti indicarmi piu precisamente cosa intendi con literal di tipo char ??

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da brizioss Visualizza il messaggio
    Siccome sono alle prime esperienze con questo linguaggio, potresti indicarmi piu precisamente cosa intendi con literal di tipo char ??
    Ovvero, invece di scrivere

    if(opr==43){

    puoi scrivere

    if(opr=='+'){



    No MP tecnici (non rispondo nemmeno!), usa il forum.

Tag per questa discussione

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 © 2025 vBulletin Solutions, Inc. All rights reserved.