Problema gets()

Pubblicità

martìn91

Utente Attivo
Messaggi
14
Reazioni
0
Punteggio
25
Ciao a tutti, devo creare un programmino semplice per la gestione di un piccolo listino di prodotti, con un vettore di stringhe e uno di float per i prezzi, però eseguendolo la gets non ne vuole sapere di acquisirmi la stringa e me la stampa sempre (null)... (per adesso i vettori sono per soli 2 prodotti per svilupparlo in maniera semplice...). Sapete dirmi dove sbaglio? Grazie.
P.S il vettore price è inizializzato tutto a -2 da richiesta dell'esercizio...

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX 2
#define L 10

int main()
{
    float price[MAX];
    int n=0, i=0;
    char warehouse[MAX][L];
    int opz;

    for(i=0; i<MAX; i++)
        {
            price[i]=-2; // inizializzazione vettore presenza prodotto o prezzo
        }

    do
    {
        printf("Listino prezzi\nPremi:\n1 per aggiungere un prodotto\n2 per stampare il listino\n0 per terminare\n");
        scanf("%d", &opz);

        switch(opz)
        {

        case (1): //aggiungi nuovo prodotto
        if(n<MAX)
        {
        {
        puts("Inserire il nome del prodotto:");
        gets(warehouse[n]);

        if(warehouse[n]==NULL)
        {
            printf("Errore, nome non valido\n");
            break;
        }
        printf("inserire il prezzo del prodotto appena selezionato in €:\t");
        scanf("%f", &price[n]);

        }
        n++;
        }
        else
        {
            printf("listino pieno!:-(\n");
        }
        break;

        case 2: //stampa tutto il contenuto del listino
        {
            for(i=0;i<MAX;i++)
            {
            puts(warehouse[i]);
            printf("\t\t%f €\n",price[i]);
            }
        }
        break;

        case 0:
        {
            printf("Arrivederci!!!\n");
            return 0;
        }
        break;

        default:
        {
            printf("comando non valido!!\n");
        }

        }
    }
        while (opz!=0);
}
 
Se ho capito il tuo problema prova a cambiare:
Codice:
gets(warehouse[n]);
con
Codice:
scanf("%s", warehouse[n]);
 
Utilizzando
Codice:
scanf("%s", warehouse[n]);
come avevo gia provato, nell'esecuzione del programma mi fa acquisire la stringa, ma non me la visualizza nella stampa con il comando del case2 (già provato sia con puts che printf)...:help:
 
Esatto ora funziona anche a me... Ma per completezza...E per non commettere lo stesso errore la prossima volta... Come mai la gets() e la puts() non funzionano??
 
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX 2
#define L 10

int verificaprodotto(float price[],int n,char warehouse[][L], char insprod[]);

int main(void)
{
    float price[MAX];
    int n=0, i=0;
    char warehouse[MAX][L];
    int opz, puoins;
    char insprod[L];

    for(i=0; i<MAX; i++)
        {
            price[i]=-2; // inizializzazione vettore presenza prodotto o prezzo
        }

    do
    {
        printf("Listino prezzi\nPremi:\n1 per aggiungere un prodotto\n2 per stampare il listino\n0 per terminare\n");
        scanf("%d", &opz);

        switch(opz)
        {

        case (1): //aggiungi nuovo prodotto
        if(n<MAX)
        {
        {
        puts("Inserire il nome del prodotto:");
        scanf("%s", insprod[L]);
        puoins= verificaprodotto (price, n, warehouse, insprod); //funzione per il controllo di eventuale esistenza precedente del prodotto

        if(puoins==1)
        {
            printf("prodotto già inserito!\n");
            break;
        }
        if(puoins==2)
        {
            printf("prezzo non ancora inizializzato:\ninserire ora il prezzo del prodotto:");
            scanf("%f",price[n]);
            break;
        }

        if(warehouse[n]==NULL)
        {
            printf("Errore, nome non valido\n");
            break;
        }
        strcpy(warehouse[n],insprod);
        printf("inserire il prezzo del prodotto appena selezionato in €:");
        scanf("%f", &price[n]);

        }
        n++;
        }
        else
        {
            printf("listino pieno!:-(\n");
        }
        break;

        case 2: //stampa tutto il contenuto del listino
        {
            for(i=0;i<MAX;i++)
            {
            printf("%s",warehouse[i]);
            printf("\t\t%f €\n",price[i]);
            }
        }
        break;

        case 0:
        {
            printf("Arrivederci!!!\n");
            return 0;
        }
        break;

        default:
        {
            printf("comando non valido!!\n");
        }

        }
    }
        while (opz!=0);
}


int verificaprodotto(float price[],int n, char warehouse[][L], char insprod[])
{
    int j, ris;
    for(j=0;j<MAX;j++)
        {
        ris=strcmp(warehouse[n],insprod);
        if(ris>=0)
            {
                return 1;
            }
            if(price[n]==-2)
            {
                return 2;
            }
        }
        return 0;
}
Sto implementando il programmino con una funzione che controlli l'univocità del nome dei prodottti inseriti... Ma quando provo a inserire il nome comincia a ripetere all'infinito il menù... :help:
 
Ho trovato un errore:
Codice:
scanf("%s", insprod[L]);
se inserisci una stringa devi scrivere cosi':
Codice:
scanf("%s", insprod);
Capito perchè?
 
Pubblicità
Pubblicità
Indietro
Top