hurricane81
30-08-2007, 17:18
Ciao a tutti! Ho questo programma che prende in input una frase e la restituisce senza le s; esiste una frase di default e ho provato ad arricchirlo con la possibilità di scegliere la frase da tastiera; però non funziona: quando scelgo di cambiare frase, mi viene visualizzata la riga "inserisci nuova frase", quindi una riga bianca e poi il programma termina. dove sbaglio? (non posso usare scanf al posto di gets perchè devo prendere una frase, non una parola!)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * cancella(char *str, char c)
{
int i, j=0;
char *app;
app=(char*) malloc(strlen(str)+1);
for (i=0; i<= strlen(str); ++i)
if (str[i]!=c)
app[j++]=str[i];
str=(char*) malloc(strlen(app)+1);
strcpy(str, app);
free(app);
return str;
}
main()
{
char x[2], y[100];
char a[]="s", b[]="n";
char *s="sschissa se ss s sfunzionassssss";
printf("La frase da esaminare è: %s\n", s);
printf("Vuoi cambiare la frase? s/n\n");
scanf("%s", x);
if (strcmp(x, b)==0)
printf("%s\n", cancella(s, 's'));
else if (strcmp(x, a)==0)
{
printf("Scrivi la nuova frase:\n");
gets(y);
printf("%s\n", cancella(y, 's'));
}
else
printf("Opzione non valida\n");
}
Ho quindi cercato di sostituire gets() con il seguente codice (definendo BUFSIZE=512 e naturalmente passando buffer e non y alla funzione cancella), ma il problema permane esattamente uguale!
char buffer[BUFSIZE];
char *p = NULL;
p = fgets (buffer, BUFSIZE, stdin);
if (!p)
{
fprintf(stderr, "Impossibile leggere la stringa (errore o EOF inatteso)\n");
exit (1);
}
/* Rimuove il newline finale o termina forzatamente la stringa */
p = (char *) memchr (buffer, '\n', BUFSIZE);
if (p == NULL)
buffer[BUFSIZE - 1] = '\0';
else
*p = '\0';
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * cancella(char *str, char c)
{
int i, j=0;
char *app;
app=(char*) malloc(strlen(str)+1);
for (i=0; i<= strlen(str); ++i)
if (str[i]!=c)
app[j++]=str[i];
str=(char*) malloc(strlen(app)+1);
strcpy(str, app);
free(app);
return str;
}
main()
{
char x[2], y[100];
char a[]="s", b[]="n";
char *s="sschissa se ss s sfunzionassssss";
printf("La frase da esaminare è: %s\n", s);
printf("Vuoi cambiare la frase? s/n\n");
scanf("%s", x);
if (strcmp(x, b)==0)
printf("%s\n", cancella(s, 's'));
else if (strcmp(x, a)==0)
{
printf("Scrivi la nuova frase:\n");
gets(y);
printf("%s\n", cancella(y, 's'));
}
else
printf("Opzione non valida\n");
}
Ho quindi cercato di sostituire gets() con il seguente codice (definendo BUFSIZE=512 e naturalmente passando buffer e non y alla funzione cancella), ma il problema permane esattamente uguale!
char buffer[BUFSIZE];
char *p = NULL;
p = fgets (buffer, BUFSIZE, stdin);
if (!p)
{
fprintf(stderr, "Impossibile leggere la stringa (errore o EOF inatteso)\n");
exit (1);
}
/* Rimuove il newline finale o termina forzatamente la stringa */
p = (char *) memchr (buffer, '\n', BUFSIZE);
if (p == NULL)
buffer[BUFSIZE - 1] = '\0';
else
*p = '\0';