Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++]Strano problema in Dev

    Salve a tutti, ho uno strano problema in DEV...
    Oggi ho fatto l'esame di informatica e questa era la traccia:
    Sia dato un file di testo contenente una sequenza di nomi (Carlo, Gianna, Massimo, Carlo, Gianna, Gianna, Ada, Marta, Ada). Nell' ipotesi che un nome maschile finisca sempre per "o" ed i nomi femminili per "a", scrivere un programma che conta e stampi i nomi maschili e i nomi femminili senza ripetizioni contenuti nel file.
    Il progetto al pc dell'università è andato bene e so stato promosso, ma tornando a casa voelvo rifarmi il programmino... Andando a compilarlo noto uno strano comportamento del DEV che ho su sto Win7 :| (l'uni usa XP).
    ecco il codice:
    main.cpp
    codice:
    #include <cstdlib>
    #include <iostream>
    #include <string.h>
    #include <fstream>
    #include "esame.h"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        vettore m, fem;
        int riemp, riemp2;
        inizializza (m, riemp, fem, riemp2);
        cout << "I nomi maschili sono "<<riemp<<" e sono:"<<endl;
        stampa (m,riemp);
        cout << endl<<endl<<"I nomi femminili sono "<<riemp2<<" e sono:"<<endl;
        stampa (fem, riemp2);
        cout << endl<<endl<<"Programma eseguito con successo. . . Premere un tasto per terminare";
        system("PAUSE>nul");
        return EXIT_SUCCESS;
    }
    esame.cpp
    codice:
    #include <iostream>
    #include <string.h>
    #include <fstream>
    #include "esame.h"
    
    using namespace std;
    
    void inizializza (vettore v, int &r, vettore v2, int &r2)
    {
        fstream f;
        stringa nomi;
        char t;
        r=0;
        r2=0;
        f.open ("name.txt", ios::in);
        while (!f.eof()){
            f >> nomi;
            t=sesso (nomi);
            cout << "";
                if ((t=='a') && (!ciSta(v2,r2,nomi))){
                strcpy(v2[r2],nomi);
                r2++;
            }
                else if (!ciSta (v,r,nomi)){
                strcpy(v[r],nomi);
                r++;
            }
        }
        
        f.close();
    }
            
    
    
    
    bool ciSta (vettore v, int r, stringa s)
    {
        for (int i=0;i<r;i++)
        while (strcmp(v[i],s)==0)
            return true;
    }
    void stampa (vettore v, int r)
    {
        for (int i=0;i<r;i++)
            cout << "V["<<i<<"]= "<<v[i]<<endl;
    }
    
    char sesso (stringa s)
    {
        char t;
        int n;
        n=strlen (s);
        t=s[n-1];
        return t;
    }
    esame.h
    codice:
    #ifndef ESAME_H
    #define ESAME_H
    #define N 100
    
    typedef char stringa [256];
    typedef stringa vettore [N];
    
    void inizializza (vettore, int &, vettore, int &);
    bool ciSta (vettore, int, stringa);
    void stampa (vettore, int);
    char sesso (stringa);
    
    #endif
    Il progetto è uguale a quello consegnato, solo in una cosa differisce... in esame.cpp
    dentro il while, se non ci metto quel cout i vettori mi risultano vuoti... se lo lascio così funziona... provate anche voi mettendo come commento quella riga... Veramente non so che problema sia... all'università non ce l'ho messo ed è andato :O

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    mm

    Forse l'errore è qui
    void inizializza (vettore v, int &r, vettore v2, int &r2)
    {
    fstream f;
    stringa nomi;
    char t;
    r=0;
    r2=0;
    f.open ("name.txt", ios::in);
    while (!f.eof()){
    f >> nomi;
    t=sesso (nomi);
    cout << "";
    if ((t=='a') && (!ciSta(v2,r2,nomi))){
    strcpy(v2[r2],nomi);
    r2++;
    }
    else if (!ciSta (v,r,nomi)){
    strcpy(v[r],nomi);
    r++;
    }
    }

    f.close();
    }

    non mi convince molto questa funzione, ma dovrei controllare meglio ho dato solo un occhiata molto veloce. Prova a cambiarla un po'...

  3. #3
    Mah, non so... anche perchè è così che l'ho scritta all'esame, senza il cout <<"" e andava alla grande... Sarà qualche incompatibilità con Windows 7? All'università ho utilizzato XP.

    EDIT: problema risolto... non so perchè ho mancato di mettere return false alla funzione ciSta e t=='o' dentro all'else if
    si può chiudere!

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.