PDA

Visualizza la versione completa : [C++] Uso di cout() in Dev-C++


TheEnigmist
25-01-2011, 19:47
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

#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

#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

#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

kirakira93
26-01-2011, 15:12
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'...

TheEnigmist
26-01-2011, 15:43
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!

Loading