PDA

Visualizza la versione completa : [c]programma con menu


cristianc
13-03-2008, 17:33
In questo programma che sto scrivendo:

#include <stdio.h>
#include <stdlib.h>

main()
{
int n,num[n];
char x;
printf("\tMENU DI PROVA\n\n\ta) Per immettere dati\n\tb) Per determinare il maggiore\n\tc) Per determinare il minore\n\td) Per ordinare\n\te) Per visualizzare\n\n");
printf("[PER USCIRE PREMERE q]\t\tScelta(a,b,c,d,e): ");
x=getchar();
switch(x) {
case 'a':
printf("In esecuzione l'opzione a..\n");
printf("Immettere dei numeri interi(separati da uno spazio): ");
scanf("d",&
case 'b':
printf("In esecuzione l'opzione b..\n");
break;
case 'c':
printf("In esecuzione l'opzione c..\n");
break;
case 'd':
printf("In esecuzione l'opzione d..\n");
break;
case 'q':
default:
printf("Opzione inesistente\n");
break;
}


per esempio per quanto riguarda l'opzione a dello switch, vorrei fare in modo da avere uno scanf che prenda un input dei numeri interi.
Cioe' sul terminale mi viene richiesto di fornire dei numeri interi, separati da uno spazio, poi quando ho finito mi basta premere invio,
C'e' un modo semplice per ottenerlo?(scusate se mi sono spiegato male)

oregon
13-03-2008, 18:09
int n, m;

scanf("%d %d", &n, &m);

cristianc
13-03-2008, 18:13
non e' detto che debbano essere due i numeri..., in base a quanti gliene do, e smette di acquisirli quando premo invio

MisterBean
13-03-2008, 19:26
Puoi usare un array di dimensione massima dichiarata (ad esempio 100), e terminare l'acquisizione dei numeri quando si riceve un terminatore (ad esempio 0). Il limite è che puoi inserire però un numero di elementi <= rispetto a quanti ne dichiari nella dimensione dell'array...

cristianc
13-03-2008, 20:05
Mister Bean, grazie.
Ma allora come si realizza uno scanf in questo modo?

MisterBean
13-03-2008, 20:34
Ti scrivo il pezzo di codice che ti interessa:

int main()
{
int i, num[100] // Al posto di 100 puoi mettere un numero a tua scelta
................... // Qui metti il resto del codice

// Quando arrivi alla scanf, la fai così:
for(i = 0; (i < 100) && (num[i] != 0); i++) // Al posto di 100 metti il numero che hai messo tra le parentesi quadre nel dichiarare l'array
scanf("%d", &num[i]);
...................

cristianc
13-03-2008, 20:43
(i < 100) && (num[i] != 0)
come terminatore vorrei utilizzare INVIO(che credo sia '\0'), ma non e' un numero e' un carattere,
quindi al posto di num[i] != 0 mettero' num[i] != ?

MisterBean
13-03-2008, 20:46
Originariamente inviato da cristianc
come terminatore vorrei utilizzare INVIO(che credo sia '\0'), ma non e' un numero e' un carattere,
quindi al posto di num[i] != 0 mettero' num[i] != ?
Qui non saprei dirti... il fatto è che la scanf ti accetta quei valori sia che tu usi lo spazio, sia che usi l'invio. Io, nella mia inesperienza, non so come risolvere questo problema. Può darsi che sia come dici tu, ma non ne sono certo.
Aspetta risposte da gente che ne sa più di me :D

XWolverineX
13-03-2008, 22:43
Se si preme il tasto invio senza premere niente il risultato della scanf dovrebbe essere niente.
Potresti provare a fare


num[i] == ''


Non garantisco risultati, però :D

cristianc
14-03-2008, 00:42
Ecco una prima bozza del programma:

#include <stdio.h>
#include <stdlib.h>

main()
{
int i,num[100],ord[100];
char x;
printf("\tMENU DI PROVA\n\n\ta) Per immettere dati\n\tb) Per determinare il maggiore\n\tc) Per determinare il minore\n\td) Per ordinare\n\te) Per visualizzare\n\n");
printf("[PER USCIRE PREMERE q]\t\tScelta(a,b,c,d,e): ");
x=getchar();
switch(x) {
case 'a':
printf("In esecuzione l'opzione a..\n");
printf("Immettere dei numeri interi(separati da uno spazio): ");
for(i=0;(i<100) && (num[i]='');i++) scanf("%d",&num[i]);
case 'b':
printf("In esecuzione l'opzione b..\n");
max=num[0];
for(i=1;i<100;i++)
if (num[i]>max) max=num[i];
case 'c':
printf("In esecuzione l'opzione c..\n");
min=num[0];
for(i=1;i<100;i++)
if (num[i]<min) min=num[i];
case 'd':
printf("In esecuzione l'opzione d..\n");
ord[0]=num[0];
for(i=0;i<100;i++)
break;
case 'q':
default:
printf("Opzione inesistente\n");
break;
}



}

Avete qualche idea riguardo all'opzione d,cioe' quella iche dati dei numeri interi ti chiede di riordinarli in modo crescente?

Loading