Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 39
  1. #1

    [C] variabili di variabili

    Ragazzi, vorrei fare una cosa simile: L'utente mi da come input un numero, io devo creare un array con le dimenzioni di quel numero... ecco come ho fatto:

    int numero;
    printf("Inserisci un numero");
    cin >> numero;
    int array[numero];

    Ma da errore, cosa posso fare per creare l'array array[numero] dove numero corrisponde alla variabile "numero"?

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Bhe se usi printf non puoi mica usare poi cin...
    Il compilatore non può allocare un array di cui non può conoscere immediatamente la dimensione. Per fare ciò di cui hai bisogno lo devi allocare dinamicamente.

    codice:
    int numero;
    scanf("%i",&numero);
    int *array = malloc(numero * sizeof(int));
    oppure in C++

    codice:
    int numero;
    cin >> numero;
    int *array = new int[numero];
    Cosi avrai un puntatore a int che puoi deferenziare per utilizzarlo come un int normale.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3

    Re: [C] variabili di variabili

    Originariamente inviato da pop killer
    Ragazzi, vorrei fare una cosa simile: L'utente mi da come input un numero, io devo creare un array con le dimenzioni di quel numero... ecco come ho fatto:

    int numero;
    printf("Inserisci un numero");
    cin >> numero;
    int array[numero];

    Ma da errore, cosa posso fare per creare l'array array[numero] dove numero corrisponde alla variabile "numero"?

    Grazie.
    Crea l'array dinamicamente con l'operatore new. Sul libro dal quale stai studiando le basi del c++ dovrebbe esserci qualcosa del genere,prova a cercare...
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Credo che stia usando il C, ma nel suo codice usa pure cin...
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    117
    ragazzi, ma a me questo prog si compila e funziona tranquillamente:

    codice:
    #include <stdio.h>
    
    int main()
    {
      int n, i;
      scanf("%d",&n);
      int arr[n];
      for (i = 0; i < n; i++)
        printf("%d\t",arr[i] = 0);
      printf("\n");
      return 0;
    }

  6. #6
    Originariamente inviato da XWolverineX
    Bhe se usi printf non puoi mica usare poi cin...
    Il compilatore non può allocare un array di cui non può conoscere immediatamente la dimensione. Per fare ciò di cui hai bisogno lo devi allocare dinamicamente.

    codice:
    int numero;
    scanf("%i",&numero);
    int *array = malloc(numero * sizeof(int));
    oppure in C++

    codice:
    int numero;
    cin >> numero;
    int *array = new int[numero];
    Cosi avrai un puntatore a int che puoi deferenziare per utilizzarlo come un int normale.
    Grazie, ho usato il secondo, ma in sostanza cosa fa un puntatore? E' l'unica cosa che non ho capito.

  7. #7
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    Originariamente inviato da {Bl4d3}
    ragazzi, ma a me questo prog si compila e funziona tranquillamente:

    codice:
    #include <stdio.h>
    
    int main()
    {
      int n, i;
      scanf("%d",&n);
      int arr[n];
      for (i = 0; i < n; i++)
        printf("%d\t",arr[i] = 0);
      printf("\n");
      return 0;
    }

    In effetti il codice è corretto ma non è nè elegante nè funzionale.
    A parte che non è proprio bello definire variabili nel mezzo del codice e sarebbe meglio farlo all'inizio dello stesso...
    Il limite della tecnica è che comunque definisci la dimensione dell'array una volta per tutte, non puoi ne variarne la dimensione durante l'esecuzione nè deallocare lo spazio occupato.
    Non da ultimo puoi creare un tale array solo limitatamente ad una funzione.. non puoi dargli visibilità globale.
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  8. #8
    Originariamente inviato da {Bl4d3}
    ragazzi, ma a me questo prog si compila e funziona tranquillamente:

    codice:
    #include <stdio.h>
    
    int main()
    {
      int n, i;
      scanf("%d",&n);
      int arr[n];
      for (i = 0; i < n; i++)
        printf("%d\t",arr[i] = 0);
      printf("\n");
      return 0;
    }
    Prova a mettere un N molto grande (prova 1000000), vedrai che andrà in stack overflow (la dimensione dello stack si decide a compile time). Per questo motivo, se hai bisogno di array dinamici meglio usare malloc (che alloca sullo heap)

    Comunque questa sintassi è consentita solo in C99
    http://forum.html.it/forum/showthrea...99#post6414323

  9. #9
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Bhe il puntatore...punta...
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  10. #10
    Originariamente inviato da pop killer
    Grazie, ho usato il secondo, ma in sostanza cosa fa un puntatore? E' l'unica cosa che non ho capito.
    http://www.oreilly.com/catalog/pcp3/chapter/ch13.html

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.