[Risolto] [C]Programma funzionante ma strano Output stringa

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
zangetsu94
Prode Principiante
Messaggi: 137
Iscrizione: mercoledì 26 novembre 2014, 15:17
Desktop: Cinnamon
Distribuzione: Linux Mint 19.1 Tessa
Sesso: Maschile
Località: Torino

[Risolto] [C]Programma funzionante ma strano Output stringa

Messaggio da zangetsu94 »

Ho scritto il seguente programma:

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;
}
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... :nono:
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. :D :birra:

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

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;
}
:ciao:
PC: Asus F555UJ-DM059T CPU: Intel Core i7-6500U OS: Linux Mint KDE 18.3 RAM: 8GB GPU: nVidia GeForce-920M
gila75
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2739
Iscrizione: mercoledì 16 gennaio 2013, 17:28
Desktop: ubuntu-2d
Distribuzione: Ubuntu 12.04.2 LTS i686
Località: Airuno(Lecco)

Re: [Risolto] [C]Programma funzionante ma strano Output stri

Messaggio da gila75 »

gets() però è fortemente deprecato, attenzione.
Puoi usare fgets o getchar() (costruendo manualmente una stringa).
Per il resto non so, se funziona...bravo hai risolto da solo :ciao:
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti