Problema con l'input di variabili char

di il
7 risposte

Problema con l'input di variabili char

Salve a tutti e grazie in anticipo del vostro aiuto. sono nuovissimo nel mondo della programmazione e il c è il primo linguaggio che vorrei imparare, per questo vorrei chiedervi di sopportare la mia ignoranza sul campo.
comunque, nel programma i cui ho riscontrato il problema avevo intenzione di migliorare il mio uso della "realloc", per farlo volevo creare un programma che leggesse un valore int da tastiera per creare determinati elementi, su qui scrivere diversi numeri, in un array. in seguito avevo intenzione di aggiungere altri elementi all'array aumentando lo spazio in memoria con la realloc e penso di esserci anche riuscito il problema è che dopo aver inserito i primi elementi dell'array domando se voglio aggiungerne altri rispondendo con un semplice y o n ma arrivati a questo punto il programma salta lo scanf chiudendo subito il programma. perciò per pura curiosità volevo sapere dove ho sbagliato (nello spazio di memoria?) e se potevate aiutarmi a correggere questo sbaglio.
ecco il codice:
#include <stdio.h>
#include <stdlib.h> 
int main() {
   int n,m;
   int l=n+m;
   int i,j,k,x;
   double *v;
   char a;
   printf("-quante sequenze di numeri desideri inserire?\n-");
   scanf("%d",&n);
   v = (double *) malloc(n*sizeof(int));
   for(i=0;i<n;i++) {
      printf("\n-elemento n* %d:",i+1);
      scanf("%lf",&v[i]);
   }
   printf("\n~elementi inseriti finora:\n");
   for(j=0;j<n;j++) {
      printf("-%lf\n",v[j]);
   }
   printf("\n-si desidera aggiungere altri elementi alla sequenza?(Y/N)\n-");
   scanf("%c",&a);
   if(a=='Y') {
     printf("\n-quanti altri elementi si desidera inserire?\n-");
     scanf("%d",&m);
     v = (double *) realloc(v,l*sizeof(double));
     for(k=n;k<l;k++) {
        printf("\n-elemento n*%d:",n+1);
        scanf("%lf",&v[n]);
     }
     printf("\n~elementi inseriti attualmente:\n");
     for(x=0;x<l;x++) {
        printf("-%lf",v[x]);
     }
     printf("\nARRIVEDERCI!\n");
   }else{
     printf("\n\n ARRIVEDERCI!\n");
   }
   free(v);
   return 0;
}
[code]

7 Risposte

  • Re: Problema con l'input di variabili char

    su cui scrivere
    Ne abbiamo discusso tante volte e anche in un thread molto recente ...
    La scanf va scritta così

    scanf(" %c",&a);

    P.S. Attento ai tag CODE, come vedi rileggendo il tuo post non sono usati correttamente.
  • Re: Problema con l'input di variabili char

    Grazie Oregon, adesso andrò a cercare il thread di cui parli. comunque non ho capito la sua risposta infatti gli scanf mi sembrano uguali al suo esempio:

    scanf(" %c",&a); [il suo] = scanf("%c",&a); [il mio]

    Oltre a questo nell'ultimo messaggio mi sono dimenticato di inviare l'output del programma:
    
    -quante sequenze di numeri desideri inserire?
    -2
    
    -elemento n* 1:1         
    
    -elemento n* 2:2
    
    ~elementi inseriti finora:
    -1.000000
    -2.000000
    
    -si desidera aggiungere altri elementi alla sequenza?(Y/N)
    -
    
     ARRIVEDERCI!
    *** Error in `./realloc': free(): invalid next size (fast): 0x08221818 ***
    ======= Backtrace: =========
    /lib/i386-linux-gnu/libc.so.6(+0x67377)[0xb7dc5377]
    /lib/i386-linux-gnu/libc.so.6(+0x6d2f7)[0xb7dcb2f7]
    /lib/i386-linux-gnu/libc.so.6(+0x6dc31)[0xb7dcbc31]
    ./realloc[0x80487a5]
    /lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf7)[0xb7d76637]
    ./realloc[0x80484a1]
    ======= Memory map: ========
    08048000-08049000 r-xp 00000000 fd:01 12846040   /home/riccai/Scrivania/es/realloc
    08049000-0804a000 r--p 00000000 fd:01 12846040   /home/riccai/Scrivania/es/realloc
    0804a000-0804b000 rw-p 00001000 fd:01 12846040   /home/riccai/Scrivania/es/realloc
    08221000-08242000 rw-p 00000000 00:00 0          [heap]
    b7c00000-b7c21000 rw-p 00000000 00:00 0 
    b7c21000-b7d00000 ---p 00000000 00:00 0 
    b7d2a000-b7d46000 r-xp 00000000 fd:01 12322545   /lib/i386-linux-gnu/libgcc_s.so.1
    b7d46000-b7d47000 rw-p 0001b000 fd:01 12322545   /lib/i386-linux-gnu/libgcc_s.so.1
    b7d5d000-b7d5e000 rw-p 00000000 00:00 0 
    b7d5e000-b7f0e000 r-xp 00000000 fd:01 12322507   /lib/i386-linux-gnu/libc-2.23.so
    b7f0e000-b7f10000 r--p 001af000 fd:01 12322507   /lib/i386-linux-gnu/libc-2.23.so
    b7f10000-b7f11000 rw-p 001b1000 fd:01 12322507   /lib/i386-linux-gnu/libc-2.23.so
    b7f11000-b7f14000 rw-p 00000000 00:00 0 
    b7f29000-b7f2b000 rw-p 00000000 00:00 0 
    b7f2b000-b7f2e000 r--p 00000000 00:00 0          [vvar]
    b7f2e000-b7f30000 r-xp 00000000 00:00 0          [vdso]
    b7f30000-b7f53000 r-xp 00000000 fd:01 12322479   /lib/i386-linux-gnu/ld-2.23.so
    b7f53000-b7f54000 r--p 00022000 fd:01 12322479   /lib/i386-linux-gnu/ld-2.23.so
    b7f54000-b7f55000 rw-p 00023000 fd:01 12322479   /lib/i386-linux-gnu/ld-2.23.so
    bf9ff000-bfa20000 rw-p 00000000 00:00 0          [stack]
    Annullato (core dump creato)
    P.S. spero di aver usato bene il tag code
  • Re: Problema con l'input di variabili char

    Sicuro che le due scanf sono uguali?
  • Re: Problema con l'input di variabili char

    Beh nella sua c’è uno spazio prima del %, ma è questo il problema?

    scanf(" %c",&a);
  • Re: Problema con l'input di variabili char

    Per la questione dell'input, quello spazio nella scanf fa la differenza e risolve il problema che hai posto qui. Lo hai provato?

    Per il resto, ho notato la linea

    int l = n + m;

    che non ha senso dato che le variabili n e m non hanno alcun valore definito in quel momento.
  • Re: Problema con l'input di variabili char

    Ok, proverò a fare come dice lei, poi le riferirò come è andata.
  • Re: Problema con l'input di variabili char

    Perfetto.
    Aveva proprio ragione, adesso capisco perché ogni volta che dovevo usare la scanf con una variabile o un array di char avevo problemi.
    Grazie mille per il suo aiuto.
Devi accedere o registrarti per scrivere nel forum
7 risposte