Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-06-2016, 15:23   #1
84mrc84
Junior Member
 
Iscritto dal: Feb 2011
Messaggi: 9
Funzione tolower() c++

Salve a tutti, volevo un aiuto su un codice che sto studiando e implementando;
trattasi del classico esempio, a titolo di semplice studio e applicazione delle tematiche da me studiate fino a questo punto, di un inventario per piccole aziende.

Il codice è molto semplice e chiaro, solo una cosa però non riesco a capire e spero di trovare qualcuno che mi aiuti:

Si tratta del menù del programma, esattamente:

do
{
cout<<"(I)mmissione\n";
cout<<"(V)isualizzazione\n";
cout<<"(A)ggiornamento\n";
cout<<"(C)ancella\n";
cout<<"(U)scita\n\n";
cout<<"Seleziona una voce: ";
cin>>ch;
}while(!strchr("ivacu",tolower(ch)));
return tolower(ch);

premetto che ho ampiamente studiato la funzione tolower(), ma non riesco a capire come riesce a funzionare in questo codice.

le mie domande sono:
1) perché se inverto la funzione con toupper() e cambio la stringa con"IVACU" non si comporta allo stesso modo logicamente invertito?
2) potete suggerirmi un utilizzo simile da poter studiare e in futuro applicare?
84mrc84 è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2016, 11:27   #2
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
Perché non si comporta allo stesso modo? Spiegati
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2016, 12:03   #3
84mrc84
Junior Member
 
Iscritto dal: Feb 2011
Messaggi: 9
Esatto, sostituendo al codice la funzione toupper() e inserendo la stringa maiuscola, il programma non funziona.
Il mio scopo è capire come la funzione tolower() in questo caso fa funzionare il programma.

Se il programma riceve un carattere maiuscolo o minuscolo, con la funzione tolower() funziona tutto, avendo la stringa in minuscolo"ivacu".

Se sostituisco la funzione con toupper() e modifico la stringa "IVACU", allora non funziona più.
84mrc84 è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2016, 13:22   #4
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
A me funziona regolarmente ...

Ma tu parli solo del codice del menu o del resto del programma?

Ultima modifica di lorenzo001 : 11-06-2016 alle 13:27.
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2016, 19:12   #5
84mrc84
Junior Member
 
Iscritto dal: Feb 2011
Messaggi: 9
vi riporto il codice ( attualmente ancora in fase di sviluppo ) così potete fare il debug assieme a me.

Il programma è di natura didattica, sono ancora alle prime armi e sto cercando di fare miei i concetti basilari.

Grazie in anticipo per l'aiuto.

Codice:
/** non accetta nomi prodotti con spaziature
 *  bisogna controllare bene l'input da tastiera
 */
#include <iostream>
#include <ctype.h>
#include <cstring>
#include <cstdlib>
#include <cstdio>

using namespace std;

const int SIZE=2;/**< misura per test programma
 */

struct inv_type
{
    char item[40];/**< nome articolo */
    double cost;/**< costo articolo */
    double retail;/**< prezzo al dettaglio */
    int on_hand;/**< quantità disponibile */
    int lead_time;/**< giorni necessari per il rifornimento */
}invtry[SIZE];/**< dichiarazione array di strutture */

void enter(), init_list(), display(), update(), input(int i), clean();
int menu();

void nessun_elemento(char *s);


int main()
{
    char choice;

    init_list();

    for(;;)
    {
        choice=menu();
        switch(choice)
        {
            case 'i' : enter();
                break;
            case 'v' : display();
                break;
            case 'a' : update();
                break;
            case 'c' : clean();
                break;
            case 'u' : return 0;
        }
    }
}

/**< inizializzazione array invtry */
void init_list()
{
    int t;

    for (t=0; t<SIZE; t++)
        *invtry[t].item = '\0';
    /** descrizione ciclo for:
     *
     * assegna il byte null '\0' a tutti i membri struttura .item dell' array di strutture invtry
     *
     */

}

/**< accetta una selezione del menu */
int menu()
{
    char ch;
    cout<<endl;
    do
    {
        cout<<"(I)mmissione\n";
        cout<<"(V)isualizzazione\n";
        cout<<"(A)ggiornamento\n";
        cout<<"(C)ancella\n";
        cout<<"(U)scita\n\n";
        cout<<"Seleziona una voce: ";
        cin>>ch;
    }while(!strchr("ivacu",tolower(ch)));
    return tolower(ch);
}

/**< inserire articoli nella lista */
void enter()
{
    int i;
    /**< trova la prima struttura libera */
    for(i=0;i<SIZE;i++)
        if(!*invtry[i].item)
            break;
    if (SIZE==i)
    {
        cout<<"Lista completa\n";
        return;
    }
    input(i);
}

/**< riceve i dati in input */
void input(int i)
{
    //char str[80];
    /**< immissione dati */
    cout<<"Articolo: ";
    cin>>invtry[i].item;

    cout<<"Costo: ";
    cin>>invtry[i].cost;

    cout<<"Prezzo al dettaglio: ";
    cin>>invtry[i].retail;

    cout<<"Quantita' disponibil: ";
    cin>>invtry[i].on_hand;

    cout<<"Tempo necessario per rifornimento: ";
    cin>>invtry[i].lead_time;
}

/**< Modifica artico esistente */
void update()
{
    int i;
    char name[80];

    cout<<"Digitare il nome dell' articolo da Aggiornare: ";
    cin>>name;

    for (i=0;i<SIZE;i++)
        if(!strcmp(name,invtry[i].item))
            break;
    if(SIZE==i)
    {
        cout<<"Articolo non trovato\n";
        return;
    }
    cout<<"Immettere i nuovi dati";
    input(i);
}

/**< Visualizzazione della lista */
void display()
{
    int t;
    for(t=0;t<SIZE;t++)
    {
        if(*invtry[t].item)
        {
            cout<<invtry[t].item<<"\n";
            cout<<"Costo in Euro: "<<invtry[t].cost;
            cout<<"\nPrezzo al dettaglio: ";
            cout<<invtry[t].retail<<endl;
            cout<<"Quantita' disponibile: "<<invtry[t].on_hand;
            cout<<"\nTempo di rifornimento: ";
            cout<<invtry[t].lead_time<<" giorni\n\n";
        }
    }
    nessun_elemento(invtry[0].item);
    }

void clean()
{
    int i;
    char name[80];

    if(*invtry[0].item == '\0')
        nessun_elemento(invtry[0].item);/**< se la prima posizione di memoria è vuota allora richiama funzione */
    else{
        cout<<"Digitare il nome dell' articolo da Eliminare: ";
        cin>>name;
        for (i=0;i<SIZE;i++)
            if(!strcmp(name,invtry[i].item))
            {
                (*invtry[i].item = '\0');
                cout<<"Articolo Eliminato\n";
            }
    }
    return;
}

void nessun_elemento(char *s)
{
    while(!*s){
        cout<<"attualmente non ci sono voci";
        cout<<endl;
        break;
    }
}

Ultima modifica di 84mrc84 : 11-06-2016 alle 19:15.
84mrc84 è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2016, 20:07   #6
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
Come ti dicevo, funziona.

Facci vedere anche il codice con le modifiche.
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto i...
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: 19:52.


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