Come mai nell'output ottengo dei caratteri non voluti. Questi sono "y·?" (quelli tra virgolette) ma cambiano ad ogni nuova esecuzione del programma. "xl?" etc...
Inserire un testo di massimo 500 caratteri terminate con il carattere "a capo":
Ho notato che a volte, nell'unione di due stringhe mi escono dei caratteri strani.
La lunghezza di stringa1 e': 82
Inserire un nuovo testo di massimo 500 caratteri terminate con il carattere "a capo":
Come mai succede questo?
La lunghezza di stringa2 e': 24
Ho notato che a volte, nell'unione di due stringhe mi escono dei caratteri strani.
Come mai succede questo?
Le 2 stringhe in una sono:
Ho notato che a volte, nell'unione di due stringhe mi escono dei caratteri strani. Come mai succede questo?y·
La lunghezza della stringa risultante e': 110
Vuoi procedere con l'esercizio successivo? 0 per continuare, -1 per terminare: -1
Time elapsed: 000:32:984
Press any key to continue
Riporto il codice:
#include <stdio.h>
#include <string.h>
#define DIM 500
int lunghezza(char a[]) { // calcola la lunghezza della stringa
int i = 0;
for(i = 0; a[i] != '\0'; ++i);
return i;
}
void attaccaStringhe(char a[], char b[]) { // attacca la stringa b alla stringa a
char unione[2 * DIM];
int lungA = lunghezza(a);
int lungB = lunghezza(b);
int k = 0;
for(int i = 0; i < lungA; ++i) {
unione[k] = a[i];
++k;
}
unione[k] = ' ';
++k;
for(int j = 0; j < lungB; ++j) {
unione[k] = b[j];
++k;
}
puts(unione);
printf("\nLa lunghezza della stringa risultante e': %d\n", lunghezza(unione));
}
void sovrascrStringhe(char a[], char b[]) { // sovrascrive la stringa b con la stringa a
int dimA = lunghezza(a);
for(int i = 0; i < dimA; ++i) {
b[i] = a[i];
}
puts(b);
printf("Sono stati sovrascritti in tutto %d caratteri della prima stringa nella seconda", dimA);
}
int main() {
char stringa1[DIM];
char stringa2[DIM];
char stringa3[DIM];
char stringa4[DIM];
printf("Inserire un testo di massimo %d caratteri terminate con il carattere \"a capo\":\n\n", DIM);
scanf(" %[^\n]", stringa1);
puts("");
printf("La lunghezza di stringa1 e': %d\n\n", lunghezza(stringa1));
printf("Inserire un nuovo testo di massimo %d caratteri terminate con il carattere \"a capo\":\n\n", DIM);
scanf(" %[^\n]", stringa2);
puts("");
printf("La lunghezza di stringa2 e': %d\n\n", lunghezza(stringa2));
puts(stringa1);
puts("");
puts(stringa2);
puts("\nLe 2 stringhe in una sono:\n");
attaccaStringhe(stringa1, stringa2);
int nuovoEsercizio = 0;
printf("\n\n\n\nVuoi procedere con l'esercizio successivo? 0 per continuare, -1 per terminare: ");
scanf("%d", &nuovoEsercizio);
if(nuovoEsercizio == 0) {
char stringa[DIM];
int riprova = 0;
while(riprova != -1) {
printf("\nInserire una stringa di massimo %d caratteri compresi gli spazi ", DIM);
printf("e ne verra' calcolata la lunghezza\nInserisci la stringa:\n\n");
scanf(" %[^\n]", stringa);
int l = lunghezza(stringa);
printf("\nLa lunghezza della stringa e': %d", l);
printf("\nVuoi riprovare con un'altra stringa? 1 per riprovare, -1 per terminare: ");
scanf("%d", &riprova);
while(getchar() != '\n');
}
printf("\n\n\n\nVuoi procedere con l'esercizio successivo? 0 per continuare, -1 per terminare: ");
scanf("%d", &nuovoEsercizio);
if(nuovoEsercizio == 0) {
printf("\nInserire una stringa di massimo %d caratteri compresi gli spazi:\n\n", DIM);
scanf(" %[^\n]", stringa3);
int l3 = lunghezza(stringa3);
printf("\nLa lunghezza della stringa e': %d\n", l3);
printf("\nInserire una stringa di massimo %d caratteri compresi gli spazi:\n\n", DIM);
scanf(" %[^\n]", stringa4);
int l4 = lunghezza(stringa4);
printf("\nLa lunghezza della stringa e': %d\n", l4);
printf("\n\nLa seconda stringa sulla quale e' stata sovrascritta la prima e':\n");
sovrascrStringhe(stringa3, stringa4);
}
}
puts("\n");
return 0;
}
// Si era commesso l'errore di non mettere lo spazio che comunque poteva essere risolto
// pulendo il buffer con la getchar(). Comunque funziona sia con entrambe le soluzione
// oppure solo con una o l'altra.
Grazie