Awenega_
Utente Attivo
- Messaggi
- 198
- Reazioni
- 26
- Punteggio
- 49
Salve, ho un problema con questo esercizio scritto in C.
Si realizzi un programma in linguaggio C in grado di gestire una rubrica di nomi e numeritelefonici. La rubrica deve contenere fino a 100 voci diverse. Ciascuna voce è composta daun nome (max 40 caratteri) e da un numero di telefono (max 20 caratteri).Il programma deve fornire all’utente un menù di scelta, con le seguenti voci:
1) Aggiungi nuova voce in rubrica
2) Ricerca esatta per nome
3) Ricerca approssimata per nome
4) Stampa completa rubrica
0) Esci dal programmaUna volta che l’utente ha scelto l’operazione desiderata (1-4), il programma acquisirà idati necessari dall’utente ed eseguirà il comando.
Nota: nella rubrica non possono esisteredue voci con lo stesso nome.
Il codice che ho scritto è questo:
In pratica il programma è fatto in modo che l'utilizzatore digiti il comando da eseguire.Il programma continua a girare finchè l'utilizzatore non digita 0, ovvero il numero corrispondente al comando di arresto del programma. Il comando 1 fa aggiungere un numero in rubrica e il suo nome corrispondente.Il programma è fatto in modo tale che se il nome non ha lettere(cioè premi invio e basta) no ti lascia inserire il numero corrispondente e termina il comando lasciandotene inserire un altro.
Non so perchè, però, il programma no mi lasci memorizzare il nome e mi dica cgia che ha zero caratteri.
- - - Updated - - -
Taggo un pochino di gente ç_ç @Falco75 , @Ico Bellungi,
@arcidiacof
Si realizzi un programma in linguaggio C in grado di gestire una rubrica di nomi e numeritelefonici. La rubrica deve contenere fino a 100 voci diverse. Ciascuna voce è composta daun nome (max 40 caratteri) e da un numero di telefono (max 20 caratteri).Il programma deve fornire all’utente un menù di scelta, con le seguenti voci:
1) Aggiungi nuova voce in rubrica
2) Ricerca esatta per nome
3) Ricerca approssimata per nome
4) Stampa completa rubrica
0) Esci dal programmaUna volta che l’utente ha scelto l’operazione desiderata (1-4), il programma acquisirà idati necessari dall’utente ed eseguirà il comando.
Nota: nella rubrica non possono esisteredue voci con lo stesso nome.
Il codice che ho scritto è questo:
Codice:
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#define MAXN 21
#define MAXL 41
#define MAXV 100
int main () {
char nome[MAXV][MAXL], numero[MAXV][MAXN], ricerca[MAXL];
int n, i, g, flag;
do {
i = 1;
flag = 0;
printf("1) Aggiungi nuova voce in rubrica\n");
printf("2) Ricerca esatta per nome\n");
printf("3) Ricerca approssimata per nome\n");
printf("4) Stampa completa rubrica\n");
printf("0) Esci dal programma\n");
printf("Digitare il numero dell'operazione da eseguire\n");
scanf("%d", &n);
if(n<0 || n>4)
printf("L'operazione digitata non e' disponibile\n");
else {
switch(n) {
case 1 :
if(i>MAXV-1)
printf("Spazio insufficiente\n");
else {
printf("Inserire il nome da memorizzare massimo 40 caratteri\n");
fgets(nome[i], 40, stdin);
nome[i][strlen(nome[i])-1] = 0;
if(strlen(nome[i])<1)
printf("Nome non valido\n");
else {
for(g=1; g<i; g++)
if(strcmp(nome[g], nome[i])==0)
flag = 1;
if(flag==1)
printf("Il nome digitato e' gia' presente nella rubrica\n");
else {
printf("Inserire il numero telefonico corrispondente massimo 20 caratteri\n");
fgets(numero[i], 20, stdin);
numero[i][strlen(numero[i])-1] = 0;
if(strlen(numero[i])<1)
printf("Numero non valido\n");
else
i++;
}
}
}
flag = 0;
break;
case 2 :
printf("Digitare il nome da cercare in rubrica\n");
fgets(ricerca, 40, stdin);
ricerca[strlen(ricerca)-1] = 0;
for(g=1; g<=i; g++) {
if(strcmp(nome[g], ricerca)==0) {
printf("Il numero di %s e' %s\n", ricerca, numero[g]);
break;
}
if(g=1 && strcmp(nome[g], ricerca)!=0)
printf("Il nome %s non e' presente nella rubrica\n", ricerca);
}
break;
case 3 :
printf("Digitare la parte di nome da cercare\n");
fgets(ricerca, 40, stdin);
ricerca[strlen(ricerca)-1] = 0;
for(g=1; g<=i; g++)
if(strstr(nome[g], ricerca)) {
printf("%s %s\n", nome[g], numero[g]);
flag = 1;
}
if(flag==0)
printf("Non esiste nessun nome in rubrica con la sequenza di lettere %s\n", ricerca);
flag = 0;
break;
case 4 :
for(g=1; g<=i; g++)
printf("%s %s\n", nome[g], numero[g]);
if(strlen(nome[i-1])==0)
printf("Non e' memorizzato nessun numero in rubrica\n");
break;
}
}
} while(n!=0);
return 0;
}
In pratica il programma è fatto in modo che l'utilizzatore digiti il comando da eseguire.Il programma continua a girare finchè l'utilizzatore non digita 0, ovvero il numero corrispondente al comando di arresto del programma. Il comando 1 fa aggiungere un numero in rubrica e il suo nome corrispondente.Il programma è fatto in modo tale che se il nome non ha lettere(cioè premi invio e basta) no ti lascia inserire il numero corrispondente e termina il comando lasciandotene inserire un altro.
Non so perchè, però, il programma no mi lasci memorizzare il nome e mi dica cgia che ha zero caratteri.
- - - Updated - - -
Taggo un pochino di gente ç_ç @Falco75 , @Ico Bellungi,
@arcidiacof