|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Aug 2007
Messaggi: 7
|
[c] prendere stringa in input da tastiera
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!)
Codice:
#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");
}
Codice:
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';
__________________
--> Progetto Wallpaper: centinaia di sfondi free (simpsons, dragonball, animali, sport, arte...) Ultima modifica di hurricane81 : 30-08-2007 alle 17:22. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Ti posto la "mia" versione.
Codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int input_line (char *buf, int bufsize)
{
char *p;
if (fgets (buf, bufsize, stdin) == NULL)
return 0;
if ((p = strchr (buf, '\n')) != NULL)
*p = '\0';
return 1;
}
char *strip_char (char *str, char c)
{
char *out;
int i, j, l = strlen (str);
if ((out = (char*) malloc (l+1)) == NULL)
return NULL;
for (i = j = 0; i < l; i++)
if (str[i] != c)
out[j++] = str[i];
out[j++] = '\0';
if ((str = (char*) realloc (out, j)) != NULL)
out = str;
return out;
}
int main (void)
{
char buf[80];
char *def = "sssprova sseliminaziones caratterisss";
char *str = NULL;
printf ("La frase da esaminare e`: \"%s\"\n", def);
printf ("Vuoi cambiare la frase? (s/n): ");
if (input_line (buf, sizeof (buf)))
{
if (strcmp (buf, "s") == 0)
{
printf ("Scrivi la nuova frase: ");
if (input_line (buf, sizeof (buf)))
str = buf;
}
else if (strcmp (buf, "n") == 0)
str = def;
else
printf ("Opzione non valida\n");
if (str != NULL)
{
str = strip_char (str, 's');
if (str != NULL)
printf ("Frase elaborata: \"%s\"\n", str);
}
}
return 0;
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:33.



















