Newsgroup: it.comp.lang.c
Titolo: puntatori non capisco

il codice che segue mi da questi errori:
 D:\!PROGR\c\punta2.c
[Warning] In function `main':
56 D:\!PROGR\c\punta2.c
[Warning] passing arg 1 of `visualizza' from incompatible pointer type
56 D:\!PROGR\c\punta2.c
[Warning] passing arg 2 of `visualizza' from incompatible pointer type
59 D:\!PROGR\c\punta2.c
[Warning] passing arg 1 of `visualizza' from incompatible pointer type
59 D:\!PROGR\c\punta2.c
[Warning] passing arg 2 of `visualizza' from incompatible pointer type
#include <stdio.h>
void mioMenu()
{
 char i;
 printf("1 - vis contatto1\n");
 printf("2 - vis contatto2\n");
 printf("3 - mod contatto1\n");
 printf("4 - mod contatto2\n");
 return;
}
void visualizza( char *nome, char *cognome )
{
 printf("Nome = %s\n",nome);
 printf("Cognome = %s\n",cognome);
  return;
}
void modifica( char *nome, char *cognome)
{
 char mynome[20], mycognome[20];
 printf("nome = ");
 scanf("%s", &mynome);
 printf("cognome = ");
 scanf ("%s", &mycognome );
 nome = mynome;
 cognome = mycognome;
 return;
}
int main()
{
 void visualizza ( char *nome, char *cognome );
 void modifica ( char *nome, char *cognome);
 int laScelta;
 char nomea[20],cognomea[20];
 char nomeb[20],cognomeb[20];
 // Inizializziamo i nomi e cognomi.
 //scanf sembra essere migliore di gets
 printf("inserire nomea: ");
 scanf("%s", &nomea);
 printf("inserire cognomea: ");
 scanf("%s", &cognomea);
 printf("inserire nomeb: ");
 scanf("%s", &nomeb);
 printf("inserire cognomeb: ");
 scanf("%s", &cognomeb);
 mioMenu();
 do
 {
  printf("Scegli = ");
  scanf("%d", &laScelta);
  switch (laScelta)
  {
      case 1:
            mioMenu();
            break;
   case 2:
    visualizza( &nomea , &cognomea );
    break;
   case 3:
    visualizza( &nomeb , &cognomeb );
    break;
   /*case 3 modifica ( &nomea, &cognomea );
    break;
   case 4 modifica ( &nomeb, &cognomeb );
    break;*/
  }
 } while ( laScelta != 0 );
}
cos'è che sbaglio? ^^'

  visualizza( &nomeb , &cognomeb );
                    ^^            ^^
Da niubbo ti dico di non prendere per oro colato quello che ti dico.
nomea,nomeb,cognomea,congnomeb li hai dichiarati come array. Quindi nella
funzione visualizza non è necessario usare l'operatore di indirizzo & in
quando i nomi degli array corrispondo di già al loro indirizzo. Se togli gli
& dovrebbe funzionare
Occhio al menu, mi pare che abbia qualcosa che non quadra.
Deep

 Occhio al menu, mi pare che abbia qualcosa che non quadra.
sisi il menù non l'avevo aggiornato ^^'
ora il menu è a posto con i testi delle scelte ;-)
oggi a pausa pranzo posterò il nuovo codice con relativi errori ;-)
se nel frattempo qualcuno suggerisce qualcos'altro... ^^

 cos'è che sbaglio? ^^'
forse l'errore + grande è quello di nn aver letto un buon libro di c ;-)
nel quale troverai sicuramente delle spiegazioni + esaurienti e corrette
delle mie...
Salutoni a tutto il gruppo !
P.S Non sarai mica uno Sky center ? Si sente la puzza di Vis :-)))

 int main(int argc, char **argv)
Posto qui la versione che ho fatto 'stamattina.
Funziona ma ha dei problemi con "laScelta"
Problemi risolvibili suppongo con il while come hai fatto tu.
stasera che torno mi studio bene il tuo codice.
intanto il mio nuovo codice è:
/////////////////////
#include <stdio.h>
#define MAX 50
typedef struct
{
 char nome[MAX];
 char cognome[MAX];
} contatto;
void mioMenu()
{
 char i;
 printf(" ____________________\n");
 printf(" 0.|.Esci           |\n");
 printf(" 1.|.Menu           |\n");
 printf(" 2.|.vis contatto1  |\n");
 printf(" 3.|.vis contatto2  |\n");
 printf(" 4.|.mod contatto1  |\n");
 printf(" 5.|.mod contatto2  |\n");
 printf(" ____________________\n");
 return;
}
void visualizza( contatto *pc )
{
 printf("Nome = %s\n", pc->nome);
 printf("Cognome = %s\n", pc->cognome);
  return;
}
void modifica( contatto *pc )
{
 printf("ex nome = %s\nNuovo Nome: ", pc->nome);
 scanf("%s", pc->nome);
 printf("ex Cognome = %s\nNuovo Cognome: ", pc->cognome);
 scanf ("%s", pc->cognome);
 return;
}
int main()
{
 void visualizza ( contatto *pc );
 void modifica ( contatto *pc );
 int laScelta;
 // Inizializziamo i nomi e cognomi.
 //scanf sembra essere migliore di gets
 contatto c1={" "," "},c2={" "," "};
 contatto *pc1,*pc2;
 pc1=&c1;
 pc2=&c2;
 mioMenu();
 do
 {
  printf("Scegli = ");
  scanf("%d", &laScelta);
  switch (laScelta)
  {
   case 1:
    mioMenu();
    break;
   case 2:
    visualizza( pc1 );
    break;
   case 3:
    visualizza( pc2 );
    break;
   case 4: modifica ( pc1 );
    break;
   case 5: modifica ( pc2 );
    break;
  }
 } while ( laScelta != 0 );
 return 0;
}

 > int main(int argc, char **argv)
argv è il vettore degli argomenti.
Per esempio se lanci il programma scrivendo:
 ./tuoprogramma par1 par2 par3
argc sarà uguale a 4
argv[0] conterrà tuoprogramma
argv[1] conterrà par1
argv[2] conterrà par2
argv[3] conterrà par3
scrivere *argv[] e **argv è equivalente per via delle proprietà di vettori e
puntatori