PDA

View Full Version : [C] Acquisizione di stringhe...


Bi0
31-01-2008, 22:21
Vi posto un programmino semplice che ho realizzato per concatenare due stringhe...

#include <stdio.h>
#define max_ele 1000

/* Programma con Funzione void unisci() che concatena due stringhe */

void unisci(char s1[], char s2[]){
int i, j;

for(i=strlen(s1), j=0; s2[j]!='\0'; i++, j++)
s1[i]=s2[j];

s1[i]='\0';
}


void main(){
char v1[max_ele];
char v2[max_ele];
int k;

printf("\nInserisci la 1a stringa: ");

/* fflush(stdin);
scanf("%[^\n]", &v1); */

for(k=0; (v1[k]=getchar())!='\n'; k++) ;

printf("\nInserisci la 2a stringa: ");

/* fflush(stdin);
scanf("%[^\n]", &v2); */

for(k=0; (v2[k]=getchar())!='\n'; k++) ;

unisci(v1, v2);

printf("\nLa stringa risultante e': %s", v1);


getch();
}



Ecco, il problema è che il programma, se non acquisisco le stringhe come ho fatto nel commento, cioè


/* fflush(stdin);
scanf("%[^\n]", &v1); */

Il programma non funziona correttamente...


Eppure la soluzione col for, l'avevo trovata sul libro di testo che abbiamo in dotazione... Qualcuno mi saprebbe spiegare il perché? :confused:

Mirkolo
31-01-2008, 22:52
In C le stringhe terminano con uno 0 e facendo l'acquisizione in quel modo lo zero non viene inserito:

for(k=0; (v1[k]=getchar())!='\n'; k++) ;
v1[k] = 0;

prova così. Ciao

k0nt3
01-02-2008, 09:50
In C le stringhe terminano con uno 0 e facendo l'acquisizione in quel modo lo zero non viene inserito:

for(k=0; (v1[k]=getchar())!='\n'; k++) ;
v1[k] = 0;

prova così. Ciao

io userei v1[k] = '\0';
è la stessa cosa, ma visto che è definito come "carattere terminatore" mi sembra più comprensibile

Bi0
01-02-2008, 12:40
Grazie :doh:
Effettivamente per un attimo ci avevo pensato, poi il sonno mi aveva cancellato quell'idea dalla testa :sofico:

Ma secondo voi, dei due qual è il miglior metodo di acquisizione?

Cmq grazie mille delle risposte :D