PDA

Visualizza la versione completa : [C++] Particolare utilizzo dello switch


Marco1995
01-05-2012, 19:11
Salve a tutti!!Mi chiedevo se nel suddetto linguaggio è possibile scrivere uno switch con indefinite soluzioni...vi faccio un esempio pratico...
Sto scrivendo un programma che deve avere uno switch con un numero di casi pari al numero delle righe presenti in un determinato file...ma non so di preciso quante righe ha quel determinato file...perchè è un file che si aggiorna continuamente.

Ad esempio ho un file di tre righe quindi posso scrivere:


switch(n)
{
case 1: {...} break;
case 2:{...}break;
case 3:{...}break;
}

se improvvisamente viene aggiunta una riga al file come posso fare in modo che lo switch si aggiorni in automatico?
Premetto che sono un neofita in programmazione e non credo sia possibile una cosa del genere...grazie delle eventuali risposte :D

oregon
01-05-2012, 19:17
No che non è possibile ... e non ha neanche senso.

Cosa fai per ogni case che non possa essere "riassunto" in una funzione o gestito con delle if ?

Marco1995
01-05-2012, 19:26
Niente ...mi sono risposto da solo!!Sono suno uno stupido :D

La soluzione era semplicemente fare un ciclo for e tramite l'istruzione if (contenuta nel ciclo stesso),riesco a "scegliere il caso giusto" .
Grazie lo stesso :D e perdono per la domanda idiota
Comunque detta così non ha senso...ecco il pezzo di codice:


cout<<"Inserisci il numero corrispondente alla cosa che vuoi fare ";
cin>>numero;
for (int i=1;i<nrighe;i++) //nrighe indefinito!!
{
if (i==numero)
ShellExecute(NULL,"open",canzone[i].c_str(),NULL,NULL,SW_SHOW);
}


Problema risolto!! e complimenti per laa velocità di risposta :D

oregon
01-05-2012, 19:30
Sì ... ma anche così non ha senso ...

A che serve il for ? Forse leggi dal file ? Ma dove ?

MItaly
01-05-2012, 21:03
Scusa, ma fare direttamente


if (numero>=0 && numero<nrighe)
ShellExecute(NULL,"open",canzone[numero].c_str(),NULL,NULL,SW_SHOW);
else
cout<<"Numero non valido!\n";

? :fagiano:

Marco1995
04-05-2012, 13:47
Sì leggo dal file...il tutto è stato fatto precedentemente ma ho evitato di scrivertelo...comunque se vuoi ti passo il sorgente :D

oregon
04-05-2012, 13:48
Devi postarlo qui il sorgente con tutto quello che serve per risponderti senza perdere giorni per capirci qualcosa ...

Marco1995
04-05-2012, 13:58
Ma il problema è risoloto!!Comunque

#include <iostream.h>
#include <conio.h>
#include <windows.h>
#include <string>
#include <fstream>



using namespace std;
int main()
{
int numero;
int scelta;
char scelta1;
string titolo;
string url;
string s[100];
string canzone [100];


cout<<"PICCOLO BUG!!!Il titolo deve essere tutto attaccato per consentirne la visualizzazione completa\n";
getch();
etichetta:


cout<<"1-Aggiungi file database"<<endl;
cout<<"2-Ascolta canzoni"<<endl;
cout<<"3-Rimuovi files"<<endl;
cout<<"4-Esci"<<endl;
cout<<"Fai la tua scelta ";
cin >> scelta;
switch (scelta)
{
case 1:
{
do {
system("cls");
ofstream f("url.txt",ios::app);
ofstream g ("Titoli.txt",ios::app);
cout<<"Inseriscil il titolo ";
cin>>titolo;
g<<titolo<<endl;
cin.sync();
cout<<"Inserisci l'indirizzo ";
cin>>url;
f<<url<<endl;
cin.sync();
system("cls");

cout<<"Vuoi aggiungerne altre ? ";
cin>>scelta1;
}
while((scelta1=='S') || (scelta1=='s'));
goto etichetta;

}
break;
case 2:
{
system("cls");
ifstream f ("Url.txt");
ifstream g("Titoli.txt");
int nrighe=0;


while (!g.eof())
{
getline(g,s[nrighe]);
nrighe++;

}
for (int i=1;i<nrighe;i++)
{
getline(g,s[i]);
cout<<i<<"- "<<s[i-1]<<endl;
}

for (int i=1;i<nrighe;i++)
getline(f,canzone[i]);

cout<<"Inserisci il numero della canzone che vuoi ascoltare ";
cin>>numero;
for (int i=1;i<nrighe;i++)

if (i==numero)
ShellExecute(NULL,"open",canzone[i].c_str(),NULL,NULL,SW_SHOW);

}
case 4: {
system("cls");
char vero;
cout<<"Vuoi uscire veramente? ";
cin>>vero; etichettina:
if ((vero=='S') || (vero=='s')) break;
else
if ((vero=='n') || (vero=='N')) goto etichetta;
else
do {
cout<<"Carattere errato "<<endl;
cin.sync();
cout<<"Ripetere la scelta ";
cin>>vero;
}
while ((vero!='s') && (vero != 'S') && (vero != 'n') && (vero != 'N'));

goto etichettina;
}
case 3: {
system("cls");

DeleteFile("Url.txt");
DeleteFile("Titoli.txt");
cout<<"Entrambi i files sono stati rimossi correttamente "<<endl;
getch();




goto etichetta;
}

}
getch();
}

è un programmino che mi è servito + che altro alla comprensione di alcune istruzioni..devo provvedere io a mettere risolto?

Marco1995
04-05-2012, 14:07
Scusa, ma fare direttamente

if (numero>=0 && numero<nrighe) ShellExecute(NULL,"open",canzone[numero].c_str(),NULL,NULL,SW_SHOW);
else
cout<<"Numero non valido!\n";
?

Valida soluzione..non ci avevo pensato,te l'ho detto che sono un neofita :D

Loading