Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - problema su array
Forum - C/C++ - problema su array

Avatar
max912 (Normal User)
Newbie


Messaggi: 6
Iscritto: 28/02/2013

Segnala al moderatore
Postato alle 18:41
Giovedì, 28/02/2013
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..

PM Quote
Avatar
Umberto (Member)
Pro


Messaggi: 156
Iscritto: 27/09/2011

Segnala al moderatore
Postato alle 19:52
Giovedì, 28/02/2013
prova ad usare lo string compair nel if.
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <string.h>
  3. #define MAXELE 100
  4. int insvin(void);
  5. int acqvin(void);
  6. void memvin(void);
  7. struct vini{
  8.     char nome_vino[20];
  9.     int annata;
  10.     char produttore[20];
  11.     int disponibilita;
  12.     float prezzo_unitario;
  13.     };
  14. struct vini v1[MAXELE];
  15. main(){
  16. int scelta;
  17.     printf("1) Inserimento vini\n");
  18.     printf("2) Acquisto vini\n");
  19.     printf("3) Memorizzazione vini\n");
  20.     printf("0) Per uscire\n");
  21.     printf("Scegliere una delle seguenti azioni:  \n");
  22.     scanf("%d", &scelta);
  23.  
  24. switch(scelta){
  25.     case 0:
  26.         printf("\n Arrivederci..\n");
  27.     break;
  28.     case 1:
  29.         insvin();
  30.     return main();
  31.     case 2:
  32.         acqvin();
  33.     return main();
  34.     /*case 3:
  35.         void memvin();
  36.     return main(); */
  37.     default:
  38.     break;
  39.     }
  40. }
  41. int insvin(void){
  42. char c;
  43. int n;
  44. FILE *fp;
  45. fp= fopen("vini.txt","r");
  46.         printf("\n INSERIMENTO VINI \n");
  47.     do{
  48.         printf("\n Quanti vini vuoi inserire?  ");
  49.         scanf("%d", &n);
  50.     }
  51.     while(n<1 || n>MAXELE);
  52.     for(c=0; c<n; c++){
  53.         fscanf(fp, "%s", v1[c].nome_vino);
  54.         printf("Annata:  ");
  55.         scanf("%d", &v1[c].annata);
  56.         printf("Produttore:  ");
  57.         scanf("%s", v1[c].produttore);
  58.         printf("Disponbilità:  ");
  59.         scanf("%d", &v1[c].disponibilita);
  60.         printf("Prezzo:  ");
  61.         scanf("%f", &v1[c].prezzo_unitario);
  62.     }
  63.         printf("\n VINI INSERITI\n");
  64.     for(c=0; c<n; c++){
  65.         printf("\n %s", v1[c].nome_vino);
  66.         printf("\n %d", (v1[c].annata));
  67.         printf("\n %s", v1[c].produttore);
  68.         printf("\n %d", (v1[c].disponibilita));
  69.         printf("\n %f\n", (v1[c].prezzo_unitario));
  70.     }
  71. }
  72. int acqvin(void){
  73. char t,g;
  74. int n;
  75. int k;
  76. char ele;
  77. int e;
  78. k=n;
  79.         printf("\n ACQUISTO VINI \n");
  80.         printf("Quale vino vuoi comprare?\n");
  81.         scanf("%s", &ele);
  82.         printf("\nIn che quantità?\n");
  83.         scanf("%d", &e);
  84.     for (g=0; g<k; g++)
  85.         if(strcmp(ele,v1[g].nome_vino)==0 && v1[g].disponibilita < e)
  86.                 printf("\nALLERT: DISPONILITà INSUFFICIENTE\n");
  87.         else
  88.             printf("\n Acquisto effettuato con successo ");
  89.      
  90. }


Ultima modifica effettuata da Umberto il 28/02/2013 alle 19:52


PM Quote
Avatar
max912 (Normal User)
Newbie


Messaggi: 6
Iscritto: 28/02/2013

Segnala al moderatore
Postato alle 12:25
Venerdì, 01/03/2013
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’"

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 435
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 13:37
Venerdì, 01/03/2013
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..
Codice sorgente - presumibilmente C++

  1. int acqvin(void){
  2.  
  3. char t,g;
  4. int n;
  5. int k;
  6. char ele;
  7. int e;
  8. k=n;
  9.         printf("\n ACQUISTO VINI \n");
  10.         printf("Quale vino vuoi comprare?\n");
  11.         scanf("%s", &ele);
  12.         printf("\nIn che quantità?\n");
  13.         scanf("%d", &e);
  14.     for (g=0; g<k; g++)
  15.         if(ele = v1[g].nome_vino && v1[g].disponibilita < e)
  16.                 printf("\nALLERT: DISPONILITà INSUFFICIENTE\n");
  17.         else
  18.             printf("\n Acquisto effettuato con successo ");
  19.      
  20. }



Quindi il codice:
Codice sorgente - presumibilmente C++

  1. int acqvin(void) {
  2.   char t, g;
  3.   int n;
  4.   int k;
  5.   char ele[20];
  6.   int e;
  7.   k = n;
  8.   printf("\n ACQUISTO VINI \n");
  9.   printf("Quale vino vuoi comprare?\n");
  10.   scanf("%s", ele);
  11.   printf("\nIn che quantità?\n");
  12.   scanf("%d", &e);
  13.   for (g = 0; g < k; g++)
  14.     if (strcmp(ele, v1[g].nome_vino) == 0 && v1[g].disponibilita < e)
  15.       printf("\nALLERT: DISPONILITà INSUFFICIENTE\n");
  16.     else
  17.       printf("\n Acquisto effettuato con successo ");
  18.  
  19. }



Bonny
PM Quote
Avatar
max912 (Normal User)
Newbie


Messaggi: 6
Iscritto: 28/02/2013

Segnala al moderatore
Postato alle 15:10
Venerdì, 01/03/2013
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à?

PM Quote
Avatar
max912 (Normal User)
Newbie


Messaggi: 6
Iscritto: 28/02/2013

Segnala al moderatore
Postato alle 16:58
Venerdì, 01/03/2013
no anzi, risolto :yup: grazie mille :D

PM Quote