Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    [c] inserimento valori in array se diversi

    Ciao a tutti, volevo realizzare con questo algoritmo, l'inserimento di valori all'interno dell'array solo se diversi da quelli gia presenti, il malfunzionamento avviene perche gli elementi sono sempre inseriti in prima posizione. Perchè? Grz!
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    /* voglio inserire degli elementi solo se non sono gia presenti all'interno */
    void stampa_array(char *a[], int n);
    int inserimento_valore(char *a[], char *v, int n);
    
    
    main(){
      char *artisti[50];
      char confronto[50];
      int x = 0;
      /* stampa_array(artisti, x); */
    for(;;){
      printf("x: %d\n", x);
      scanf("%s", confronto);
      x = inserimento_valore(artisti, confronto, x);
    }
      system("pause");
           
    }
    
    
    int inserimento_valore(char *a[], char *v, int n){
      int i;
      for(i=0; i<n && strcmp(a[i],v)!=0;i++);
      printf("uscita del for con i: %d", i);
      if(i==n) {a[i] = v; n++;}
      stampa_array(a, n);
      return n;
    }
    
    
    void stampa_array(char *a[], int n){
      int i;
      printf("stampa array\n");
      for(i=0;i<n;i++) printf("%s\n", a[i]);
          
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Guarda che

    char*artisti[50];

    rappresenta un vettore di 50 puntatori a stringhe mai allocate.

    Quando fai l'assegnazione nella inserimento_valore non fai altro che assegnare *sempre* il puntatore della stringa confronto e non è quello che pensi di fare.

    Se usi un array di puntatori a stringa, prima devi allocare le singole stringhe che utilizzerai con la malloc e poi copiare con la funzione strcpy. Se non vuoi allocare dinamicamente allora dovrai utilizzare un array di tipo

    char artisti[50][50];
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    grazie...ma non riesco a fare le modifiche opportune : ( puoi aiutarmi?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Hai provato ad utilizzare l'array

    char artisti[50][50];

    come ti ho suggerito? Mostra il codice che hai provato a scrivere.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    ma come dovrei memorizzare poi la mia stringa nella prima posizione?
    ho provato con : artisti[0][]= "stringa";
    ma nulla

    Quote Originariamente inviata da oregon Visualizza il messaggio
    Hai provato ad utilizzare l'array

    char artisti[50][50];

    come ti ho suggerito? Mostra il codice che hai provato a scrivere.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Devi studiare ed usare la funzione strcpy

    strcpy(artisti[0], "stringa");
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    ok, grazie. Ho fatto questa correzione e funziona. Alla fine ho preferito usare la malloc. Grazie ancora per i consigli.
    codice:
      if(i==n) {
        char *area_stringa = (char *) malloc(sizeof(v));
        strcpy(area_stringa, v);
        a[i] = area_stringa; 
        n++;
      }
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Devi studiare ed usare la funzione strcpy

    strcpy(artisti[0], "stringa");

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se usi la malloc e a è già un array di puntatori, non c'è necessità di passare attraverso un altro puntatore.

    Ti basta


    codice:
      if(i==n) {
         a[i] = (char *) malloc(strlen(v)+1);
        strcpy(a[i], v);
        n++;
      }
    Occhio ! Non usare sizeof ma strlen()+1
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.