PDA

Visualizza la versione completa : [C] Problema di assegnamento


spezio
09-03-2010, 20:57
Qualcuno sa dirmi perchč non riesco a fare questo assegnamento???
Segno le parti in ROSSO nel CODICE...
Grazie a tutti per la collaborazione.....
Fede





#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>

#define SIZE 20

typedef struct nodo{
char cognome[20];
char nome[20];
char telefono[20];
struct nodo *succ;
}agenda;

int main()
{
agenda *k, *pun;
FILE *rubrica;
int count = 0,i = 0;


if ((rubrica = fopen("agenda.txt", "r")) == NULL)
{
printf("Il File che stai cercando di aprire non esiste\n");
}
else
{
k = (agenda *)malloc(sizeof(agenda));
if(k==NULL)
{
printf("Memoria esaurita\n");
}
else
{
fscanf(rubrica,"%s",k->cognome);
fscanf(rubrica,"%s",k->nome);
fscanf(rubrica,"%s",k->telefono);
pun = k;
count++;
while(!feof(rubrica))
{
pun->succ = (agenda *)malloc(sizeof(agenda));
pun = pun->succ ;
fscanf(rubrica,"%s",pun->cognome);
fscanf(rubrica,"%s",pun->nome);
fscanf(rubrica,"%s",pun->telefono);
count++;
}
pun->succ = NULL;
printf("Numero di record trovati: %d\n",count);
pun = k;
do
{
printf("\nNome: %s \t Cognome: %s \t Telefono: %s \t \n",pun->nome,pun->cognome,pun->telefono);
pun=pun->succ;
}while(pun != NULL);

pun = k;

char** cognomi = (char**)malloc(sizeof(char*) * count);
char** nomi = (char**)malloc(sizeof(char*) * count);
char** telefo = (char**)malloc(sizeof(char*) * count);

for(i = 0; i<count; i++)
{
cognomi[i] = (char*)malloc(sizeof(char) * SIZE);
char* value1 = pun->cognome;
strcpy(cognomi[i], value1);
nomi[i] = (char*)malloc(sizeof(char) * SIZE);
char* value2 = pun->nome;
strcpy(nomi[i], value2);
telefo[i] = (char*)malloc(sizeof(char) * SIZE);
char* value3 = pun->telefono;
strcpy(telefo[i], value3);
pun = pun->succ;
}



int scambio = 0;
int j;
char minore_cognome[20];
char minore_nome[20];
char minore_telefono[20];

for(i=0;i<=(count-1);i++)
{
for(j=i+1;j<=(count);j++)
{
if(cognomi[j] < cognomi [i])
{
minore_cognome = cognomi[j];
minore_nome == nomi[j];
minore_telefono == telefo[j];
cognomi[j] == cognomi[i];
nomi[j] == nomi[i];
telefo[j] == telefo[i];
cognomi[i] == minore_cognome;
nomi[i] == minore_nome;
telefo[i] == minore_telefono; }
}
}

printf("\n");
for(i = 0; i < count; i++)
{
printf(">> %s <<\n", cognomi[i]);
printf(">> %s <<\n", nomi[i]);
}
for(i = 0; i < count; i++)
free(cognomi[i]);
free(cognomi);

}
}


fclose(rubrica);
printf("\n");
system("PAUSE");
return 0;
}

oregon
09-03-2010, 21:02
In C non si assegnano le stringhe in quel modo ... come scritto in qualsiasi libro di base, si usano funzioni come la

strcpy

che copiano carattere per carattere.

spezio
09-03-2010, 21:07
grazie oregon....
mi spiace...io non ho un libro....ho solo dei professori svogliatissimi...ma che non correggono il codice all'esame se non compila nemmeno.....

Ti ringrazio per l'aiuto....ora provo con strcpy
dovrebbe essere strcpy(minore_cognome, cognomi[i]) ???? giusto?????

oregon
09-03-2010, 21:15
Nel codice precedente hai usato j non i ...

spezio
09-03-2010, 21:40
ho modificato il codice come segue.....perņ non vedo risultati....il vettore cognomi[i] non cambia quando lo stampo sotto....



int j;
char minore_cognome[20];
char minore_nome[20];
char minore_telefono[20];

for(i=0;i<=(count-2);i++)
{
for(j=i+1;j<=(count-1);j++)
{
if(cognomi[j] < cognomi [i])
{
strcpy(minore_cognome,cognomi[j]);
strcpy(minore_nome,nomi[j]);
strcpy(minore_telefono,telefo[j]);
strcpy(cognomi[j],cognomi[i]);
strcpy(nomi[j],nomi[i]);
strcpy(telefo[j],telefo[i]);
strcpy(cognomi[i],minore_cognome);
strcpy(nomi[i],minore_nome);
strcpy(telefo[i],minore_telefono);
}
}
}

oregon
09-03-2010, 21:53
Bisogna vedere se la if viene eseguita o no ... abbiamo solamente parlato dell'assegnazione (la zona segnata in rosso), non ho controllato tutto il resto ...

spezio
10-03-2010, 03:49
Ho provato ad eseguire il codice mettendo // davanti alla if ed effetivamente lo esegue...quindi credo proprio a questo punto che sia la if a non essere eseguita con il confronto fra stringhe.....

qualche idea????

oregon
10-03-2010, 08:01
Il mio voleva essere un suggerimento a controllare la if ... ma non l'hai colto ...

Due stringhe non si confrontano in quel modo in C ... usi le stringhe come se lavorassi in Visual Basic ...

Per confrontare due stringhe devi usare la funzione strcmp

Se devi usare le stringhe C, devi studiarne le funzioni che le trattano ...

spezio
10-03-2010, 11:59
Oregon ma come fai?

Io ho studiato proprio Visual basic 6........ora perņ mi trovo a dover programmare con il C.......

Stai diventando il mio mito....ehehhe.....grazie...

Loading