Oppure

Loading
28/02/13 17:41
max912
salve ragazzi.. avrei un problema su un programma in c.. praticamente nn riesco a controllare se un elemento è dentro l'array.. ho provato in tutti i modi ma nnt :(..
il problema principale è nell'ultima funzione, quella di acqvin (che sarebbe una funzione per l'acquisto di vini).. il testo chiede è questo "scrivere una funzione per l'acquisto dei vini. Stampare un messaggio    ' Alert: disponibilità insufficiente ' nel caso in cui la disponibilità in cantina del vino scelto sia inferiore alla richiesta dell'utente"

questo è il mio programma..

#include <stdio.h>
#include <string.h>
#define MAXELE 100
int insvin(void);
int acqvin(void);
void memvin(void);
struct vini{
    char nome_vino[20];
    int annata;
    char produttore[20];
    int disponibilita;
    float prezzo_unitario;
    };
struct vini v1[MAXELE];
main(){
int scelta;
    printf("1) Inserimento vini\n";);
    printf("2) Acquisto vini\n";);
    printf("3) Memorizzazione vini\n";);
    printf("0) Per uscire\n";);
    printf("Scegliere una delle seguenti azioni: \n";);
    scanf("%d", &scelta);

switch(scelta){
    case 0:
        printf("\n Arrivederci..\n";);
    break;
    case 1:
        insvin();
    return main();
    case 2:
        acqvin();
    return main();
    /*case 3:
        void memvin();
    return main(); */
    default:
    break;
    }
}
int insvin(void){
char c;
int n;
FILE *fp;
fp= fopen("vini.txt","r";);
        printf("\n INSERIMENTO VINI \n";);
    do{
        printf("\n Quanti vini vuoi inserire? ";);
        scanf("%d", &n);
    }
    while(n<1 || n>MAXELE);
    for(c=0; c<n; c++){
        fscanf(fp, "%s", v1[c].nome_vino);
        printf("Annata: ";);
        scanf("%d", &v1[c].annata);
        printf("Produttore: ";);
        scanf("%s", v1[c].produttore);
        printf("Disponbilità: ";);
        scanf("%d", &v1[c].disponibilita);
        printf("Prezzo: ";);
        scanf("%f", &v1[c].prezzo_unitario);
    }
        printf("\n VINI INSERITI\n";);
    for(c=0; c<n; c++){
        printf("\n %s", v1[c].nome_vino);
        printf("\n %d", (v1[c].annata));
        printf("\n %s", v1[c].produttore);
        printf("\n %d", (v1[c].disponibilita));
        printf("\n %f\n", (v1[c].prezzo_unitario));
    }
}
int acqvin(void){
char t,g;
int n;
int k;
char ele;
int e;
k=n;
        printf("\n ACQUISTO VINI \n";);
        printf("Quale vino vuoi comprare?\n";);
        scanf("%s", &ele);
        printf("\nIn che quantità?\n";);
        scanf("%d", &e);
    for (g=0; g<k; g++)
        if(ele = v1[g].nome_vino && v1[g].disponibilita < e)
                printf("\nALLERT: DISPONILITà INSUFFICIENTE\n";);
        else
            printf("\n Acquisto effettuato con successo :)";);
    
}

grazie in anticipo..
aaa
28/02/13 18:52
Umberto
prova ad usare lo string compair nel if.
#include <stdio.h> 
#include <string.h> 
#define MAXELE 100 
int insvin(void); 
int acqvin(void); 
void memvin(void); 
struct vini{ 
    char nome_vino[20]; 
    int annata; 
    char produttore[20]; 
    int disponibilita; 
    float prezzo_unitario; 
    }; 
struct vini v1[MAXELE]; 
main(){ 
int scelta; 
    printf("1) Inserimento vini\n"); 
    printf("2) Acquisto vini\n"); 
    printf("3) Memorizzazione vini\n"); 
    printf("0) Per uscire\n"); 
    printf("Scegliere una delle seguenti azioni:  \n"); 
    scanf("%d", &scelta); 

switch(scelta){ 
    case 0: 
        printf("\n Arrivederci..\n"); 
    break; 
    case 1: 
        insvin(); 
    return main(); 
    case 2: 
        acqvin(); 
    return main(); 
    /*case 3: 
        void memvin(); 
    return main(); */ 
    default: 
    break; 
    } 
} 
int insvin(void){ 
char c; 
int n; 
FILE *fp; 
fp= fopen("vini.txt","r"); 
        printf("\n INSERIMENTO VINI \n"); 
    do{ 
        printf("\n Quanti vini vuoi inserire?  "); 
        scanf("%d", &n); 
    } 
    while(n<1 || n>MAXELE); 
    for(c=0; c<n; c++){ 
        fscanf(fp, "%s", v1[c].nome_vino); 
        printf("Annata:  "); 
        scanf("%d", &v1[c].annata); 
        printf("Produttore:  "); 
        scanf("%s", v1[c].produttore); 
        printf("Disponbilità:  "); 
        scanf("%d", &v1[c].disponibilita); 
        printf("Prezzo:  "); 
        scanf("%f", &v1[c].prezzo_unitario); 
    } 
        printf("\n VINI INSERITI\n"); 
    for(c=0; c<n; c++){ 
        printf("\n %s", v1[c].nome_vino); 
        printf("\n %d", (v1[c].annata)); 
        printf("\n %s", v1[c].produttore); 
        printf("\n %d", (v1[c].disponibilita)); 
        printf("\n %f\n", (v1[c].prezzo_unitario)); 
    } 
} 
int acqvin(void){ 
char t,g; 
int n; 
int k; 
char ele; 
int e; 
k=n; 
        printf("\n ACQUISTO VINI \n"); 
        printf("Quale vino vuoi comprare?\n"); 
        scanf("%s", &ele); 
        printf("\nIn che quantità?\n"); 
        scanf("%d", &e); 
    for (g=0; g<k; g++) 
        if(strcmp(ele,v1[g].nome_vino)==0 && v1[g].disponibilita < e) 
                printf("\nALLERT: DISPONILITà INSUFFICIENTE\n"); 
        else 
            printf("\n Acquisto effettuato con successo "); 
     
} 
Ultima modifica effettuata da Umberto 28/02/13 18:52
aaa
01/03/13 11:25
max912
ho provato con lo string compair nell'if ma nnt da fare.. mi compare questo "warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast [enabled by default]
In file included from vini.c:2:0:
/usr/include/string.h:143:12: note: expected ‘const char *’ but argument is of type ‘char’"
aaa
01/03/13 12:37
Bonny
in acqvin(), dichiari 'ele' come char e poi lo vuoi confrontare con char nomevino[20].
char ele; è un carattere char nomevino[20] è un array di caratteri.
Giustamente @Umberto ti suggerisce di usare la strcmp(void *str1, void *str2), con la quale confrontare i due valori, ma i valori sono di tipo diverso..
int acqvin(void){ 

char t,g; 
int n; 
int k; 
char ele; 
int e; 
k=n; 
        printf("\n ACQUISTO VINI \n"); 
        printf("Quale vino vuoi comprare?\n"); 
        scanf("%s", &ele); 
        printf("\nIn che quantità?\n"); 
        scanf("%d", &e); 
    for (g=0; g<k; g++) 
        if(ele = v1[g].nome_vino && v1[g].disponibilita < e) 
                printf("\nALLERT: DISPONILITà INSUFFICIENTE\n"); 
        else 
            printf("\n Acquisto effettuato con successo "); 
     
} 


Quindi il codice:
int acqvin(void) {
  char t, g;
  int n;
  int k;
  char ele[20];
  int e;
  k = n;
  printf("\n ACQUISTO VINI \n");
  printf("Quale vino vuoi comprare?\n");
  scanf("%s", ele);
  printf("\nIn che quantità?\n");
  scanf("%d", &e);
  for (g = 0; g < k; g++)
    if (strcmp(ele, v1[g].nome_vino) == 0 && v1[g].disponibilita < e)
      printf("\nALLERT: DISPONILITà INSUFFICIENTE\n");
    else
      printf("\n Acquisto effettuato con successo ");

}
aaa
01/03/13 14:10
max912
praticamente quello che dovrei fare io è inserire un nome di un vino, verificare se il nome del vino è presente all'interno dell'array e poi verificare la disponibilità.. facendo la strcmp mi dice che i valori sono diversi.. quindi come potrei fare a vedere se un elemento di tipo char è all'interno di quel determinato vettore e poi verificare la disponibilità?
aaa
01/03/13 15:58
max912
no anzi, risolto :yup: grazie mille :D
aaa