puntatore di vettori[RISOLTO]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

puntatore di vettori[RISOLTO]

Messaggio da Blallo »

Codice: Seleziona tutto

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLN 99

int main()
{
	FILE *fp;
	char strIN[MAXLN], a[MAXLN], M[MAXLN][MAXLN];
	char *vett[MAXLN], t[MAXLN];
	int maxrow, i=0, j, k;

	printf("Inserire nome file:");
	scanf("%s",&strIN);
	if((fp=fopen(strIN,"r"))==NULL)
	{
		printf("Errore apertura file");
		return EXIT_SUCCESS;
	}
	printf("Inserire numero righe:");
	scanf("%d",&maxrow);
	if(maxrow>MAXLN)
	{
		printf("Numero righe eccessivo");
		return EXIT_SUCCESS;
	}

	while(((fgets(a,MAXLN,fp))!=NULL)&& (i+1<=maxrow))
	{
		if(a[strlen(a)]=='\n')
			a[strlen(a)]='\0';
		strcpy(M[i], a);
		vett[i]=M[i];
		i++;
	}
	
	for(i=0;i<maxrow;i++)
		printf("%s",vett[i]);
	/*scambio vettori*/
	printf("Che righe vuoi sostituire?(A con B)");
	scanf("%d", &j);
	scanf("%d", &k);
	
	t=vett[j-1];
	vett[j-1]=vett[k-1];
	vett[k-1]=t;	
	
	for(i=0;i<maxrow;i++)
		printf("%s",vett[i]);

	return EXIT_SUCCESS;
}
avendo vett, devo usarlo per scambiare 2 righe tra loro del file di testo che do in input...(grazie a tutti!)
Ultima modifica di Blallo il lun 6 lug 2009, 23:13, modificato 1 volta in totale.

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: puntatore di vettori

Messaggio da d4z_c0nf »

Dichiara t come puntatore a char.
Per la cronaca, non so se lo sai ma:

Codice: Seleziona tutto

char *vett[MAXLN]
Questo significa che vett è un vettore di puntatore a char

rock

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: puntatore di vettori

Messaggio da Blallo »

perfetto! funziona! ma perchè ho dovuto imporre t come puntatore? (almeno così capisco il funzionamento)

Avatar utente
ulisse89
Packager
Packager
Messaggi: 643
Iscritto il: sab 17 gen 2009, 12:53
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce
Località: Bologna

Re: puntatore di vettori

Messaggio da ulisse89 »

Nel codice che hai postato t lo dichiari come vettore di puntatori a carattere. Mentre ti serve solo come stringa temporanea per effettuare lo scambio. Per cui devi dichiararla come stringa ovvero come puntatore a carattere.

Avatar utente
Blallo
Packager
Packager
Messaggi: 3302
Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:

Re: puntatore di vettori

Messaggio da Blallo »

claro come il sole

Rispondi