Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C] Copie di array

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    343

    [C] Copie di array

    Ciao a tutti, sono alle prime armi col C e sto provando a fare una funzione che, dato un array a([1,2,3,4, 5]), deve copiare in un altro array (b) di dimensione doppia il primo, così che il risultato risulti: b[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
    Dove sbaglio?

    codice:
    #include <stdio.h>
    main(){
    int a[5]= { 1, 2, 3, 4, 5 }; /* Array iniziale */
    int b[10]; /* Array finale */
    
    int i=0; /* contatori*/
    int j=0;
    
    while(i<5)  { /* finchè i<5 copia in b i primi 5 elementi di a*/
     b[i]=a[i];
      i++;
      }
      i=0; /* riporto i a 0*/
    while(i<5)  { /* finché i è minore di 5 copia in b gli elementi di a partendo dal primo*/
      b[j]=a[i];
      j++;
      i++;
      }
    int k=10;     /* per vedere se ho fatto giusto stampo l'array b */
    while (k!=0) {
    printf("\n", i, b[k]);
    k--;
      }
        }
    Grazie anticipatamente!

  2. #2
    perchè non usi un ciclo for ?
    codice:
    unsigned int i
    for (i; i < n; i++)
       b [i] = b [i+n] = a [i];
    dove n è il numero di elementi di a...
    Oppure con i while
    codice:
    unsigned int i = 0;
    while ( i < n)
       {
       b [i] = b [i+n] = a [i];
       i++;
       }
    Experience is what you get when you don’t get what you want

  3. #3
    PS: nel primo ciclo non hai incrementato j e hai fatto un po' di confusione
    La stampa non va bene, inoltre i ha sempre lo stesso valore ...
    Guarda un po' il codice
    Experience is what you get when you don’t get what you want

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    343
    Hai ragione, me ne sono accorto giusto ora!
    Grazie mille....
    Quindi così ora dovrebbe funzionarmi?

    codice:
    #include <stdio.h>
    main(){
    int k;
    int a[5]= { 1, 2, 3, 4, 5 }; /* Array iniziale */
    int b[10]; /* Array finale */
    int n=10;
    unsigned int i = 0;
    while ( i < n)
       {
       b [i] = b [i+n] = a [i];
       i++;
       }
        
    for (k=0; k<10; k++)
    {
       printf ("%d", b[k]);
    }
    
          }
    EDIT: no, non va mi sa che sbaglio a stampare.....

  5. #5
    Un piccolo trucco :
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int a[5]= { 1, 2, 3, 4, 5 }; /* Array iniziale */
        int b[10]; /* Array finale */
        int counter;
        memcpy(b,a,sizeof(a));
        memcpy(b+sizeof(a),a,sizeof(a));
        for(counter=0;counter<sizeof(b)/sizeof(int);counter++)
            printf("%d\n",b[counter]);
        return 0;
    }
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... l'errore e' nella while

    codice:
       while ( i < n/2)
       {
          b[i] = b[i+5] = a [i%5];
          i++;
       }
    P.S. Si potrebbe utilizzare la memcpy ma, probabilmente, per un motivo didattico, non puoi ancora utilizzarla ...

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    343
    Perfetto, grazie Oregon e grazie a tutti voi!Ora funziona!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.