[Risolto] [C]Programma funzionante ma strano Output stringa
Inviato: sabato 23 maggio 2015, 18:28
Ho scritto il seguente programma:
Il quale funziona abbastanza bene (anche se può essere ottimizzato). L'unico problema è che con tutte le prove che ho fatto, soltanto con una dà "problemi". Inserendo "vacaca" come frase durante l'esecuzione mi dà un output indesiderato con una serie di simboli non richiesti... Ho pensato che si potesse trattare dell' "invio" o del terminatore di stringa o qualcosa del genere poiché scrivendo "vacaca " (spazio compreso) i simboli finali cambiano completamente.
Questo output però con frasi più o meno della stessa dimensione non capita...
Maggiori informazioni al riguardo? Soluzioni? Se non ricordo male per i char semplici c'era la combinazione %c%*c per non "prendere in considerazione l'invio (o qualcosa del genere).
Attendo spiegazioni.

EDIT:
Effettivamente non avevo inserito il terminatore di stringa. Ho ottimizzato il programma e va alla perfezione.

Codice: Seleziona tutto
/*
Scrivere un programma in linguaggio C che legga una frase introdotta da tastiera. La
frase è terminata dall’introduzione del carattere di invio. La frase contiene sia caratteri
maiuscoli che caratteri minuscoli, e complessivamente al più 100 caratteri. Il programma
deve svolgere le seguenti operazioni:
• visualizzare la frase inserita;
• costruire una nuova frase tale che ogni lettera vocale presente nella frase di partenza
sia seguita dalla lettera ’f’ (se la vocale è minuscola) o dalla lettera ’F’ (se la vocale è
maiuscola) nella nuova frase. Il programma deve memorizzare la nuova frase in una
opportuna variabile.
• visualizzare la nuova frase.
Ad esempio, la frase VacAnze di NaTAle diviene VafcAFnzef dif NafTAFlef.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
int main()
{
char s[N+1], smod[2*N+1];
int i, j, lung;
printf("Frase: ");
gets(s);
printf("\n\nLa frase inserita è la seguente:\n%s", s);
lung=strlen(s);
for (i=0; i<strlen(s); i++)
{
if (s[i]=='a' || s[i]=='e' || s[i]=='i' || s[i]=='o' || s[i]=='u' || s[i]=='y'
|| s[i]=='A' || s[i]=='E' || s[i]=='I' || s[i]=='O' || s[i]=='U' || s[i]=='Y')
{
lung++;
}
}
for (i=0, j=0; i<strlen(s) && j<lung; (i++), j++)
{
if (s[i]=='a' || s[i]=='e' || s[i]=='i' || s[i]=='o' || s[i]=='u' || s[i]=='y')
{
smod[j]=s[i];
smod[j+1]='f';
j++;
}
else
{
if (s[i]=='A' || s[i]=='E' || s[i]=='I' || s[i]=='O' || s[i]=='U' || s[i]=='Y')
{
smod[j]=s[i];
smod[j+1]='F';
j++;
}
else
{
smod[j]=s[i];
}
}
}
printf("\n\nNuova frase:\n%s\n\n", smod);
return 0;
}
Questo output però con frasi più o meno della stessa dimensione non capita...
Maggiori informazioni al riguardo? Soluzioni? Se non ricordo male per i char semplici c'era la combinazione %c%*c per non "prendere in considerazione l'invio (o qualcosa del genere).
Attendo spiegazioni.
EDIT:
Effettivamente non avevo inserito il terminatore di stringa. Ho ottimizzato il programma e va alla perfezione.
Codice: Seleziona tutto
/*
Scrivere un programma in linguaggio C che legga una frase introdotta da tastiera. La
frase è terminata dall’introduzione del carattere di invio. La frase contiene sia caratteri
maiuscoli che caratteri minuscoli, e complessivamente al più 100 caratteri. Il programma
deve svolgere le seguenti operazioni:
• visualizzare la frase inserita;
• costruire una nuova frase tale che ogni lettera vocale presente nella frase di partenza
sia seguita dalla lettera ’f’ (se la vocale è minuscola) o dalla lettera ’F’ (se la vocale è
maiuscola) nella nuova frase. Il programma deve memorizzare la nuova frase in una
opportuna variabile.
• visualizzare la nuova frase.
Ad esempio, la frase VacAnze di NaTAle diviene VafcAFnzef dif NafTAFlef.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
int main()
{
char s[N+1], smod[2*N+1];
int i, j;
printf("Frase: ");
gets(s);
printf("\n\nLa frase inserita è la seguente:\n%s", s);
for (i=0, j=0; i<strlen(s); i++)
{
smod[j]=s[i];
j++;
if (s[i]=='a' || s[i]=='e' || s[i]=='i' || s[i]=='o' || s[i]=='u' || s[i]=='y')
{
smod[j]='f';
j++;
}
else
{
if (s[i]=='A' || s[i]=='E' || s[i]=='I' || s[i]=='O' || s[i]=='U' || s[i]=='Y')
{
smod[j]='F';
j++;
}
}
}
smod[j]='\0';
printf("\n\nNuova frase:\n%s\n\n", smod);
return 0;
}