Torna indietro   Hardware Upgrade Forum > Software > Programmazione

In sella alla Fiido Nomads Pro: e-bike con motore centrale da 100 Nm per il divertimento a 360 gradi
In sella alla Fiido Nomads Pro: e-bike con motore centrale da 100 Nm per il divertimento a 360 gradi
Abbiamo assemblato e provato la Fiido Nomads Pro, evoluzione del modello da trekking già presente nella gamma, che migliora in tutto, soprattutto grazie al motore centrale, fluido e potente. Ottima app, costruzione solida e prezzo ok completano il quadro
ASUS Zenbook 14 (UX3480AA): tanta autonomia con uno chassis bello e robusto
ASUS Zenbook 14 (UX3480AA): tanta autonomia con uno chassis bello e robusto
Lo chassis in Ceraluminium è il cuore di questo notebook in edizione 2026, un modello pensato per garantire produttività con le tipiche applicazioni di produttività personale e capace di offrire un'autonomia di funzionamento lontano dalla presa di corrente da riferimento. Potenza, facilità di trasporto e costruzione robusta tutto in un notebook compatto.
MSI PRO MAX: QD-OLED ultrawide per lavorare, creare e giocare
MSI PRO MAX: QD-OLED ultrawide per lavorare, creare e giocare
MSI PRO MAX 341QPXW14G è un monitor ultrawide da 34 pollici che porta la tecnologia QD-OLED di quinta generazione in un contesto principalmente orientato alla produttività. La qualità dell'immagine è elevatissima, il formato 21:9 è ideale per il multitasking e la dotazione di porte trasforma il monitor in un vero hub per Mac, PC e dispositivi mobili. Il limite principale è invece il refresh rate di soli 144 Hz, che lo allontana dai giocatori competitivi più esigenti
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-08-2007, 16:18   #1
hurricane81
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");
}
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!
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 16:22.
hurricane81 è offline   Rispondi citando il messaggio o parte di esso
Old 31-08-2007, 09:54   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
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;
}
Come vedi, invece di usare un mix di scanf/gets (che sono molto problematiche) ho definito una semplice funzione di input di una riga, molto più comoda.
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


In sella alla Fiido Nomads Pro: e-bike con motore centrale da 100 Nm per il divertimento a 360 gradi In sella alla Fiido Nomads Pro: e-bike con motor...
ASUS Zenbook 14 (UX3480AA): tanta autonomia con uno chassis bello e robusto ASUS Zenbook 14 (UX3480AA): tanta autonomia con ...
MSI PRO MAX: QD-OLED ultrawide per lavorare, creare e giocare MSI PRO MAX: QD-OLED ultrawide per lavorare, cre...
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Addio conversioni: Google Drive e Docs o...
Arriva il portale di Google che smascher...
Gli iPhone 18 Pro non convincono: Apple ...
NVIDIA torna su macOS con un driver non ...
Engwe ha un modello che è il SUV ...
Le migliori offerte del weekend Amazon: ...
Cina e UE, intesa sulle auto ibride: Pec...
2 lavatrici slim COMFEE’ a 255€ o 280€ s...
Anche a ottobre tornano i coupon nascost...
Robot ECOVACS DEEBOT MINI a 198,98€ su A...
E-bike in offerta: una in stile Engwe a ...
Auricolari Motorola Moto Buds a 24,90€: ...
Tim Berners-Lee a Torino: 'Voglio un'IA ...
Ring ancora a prezzi super su Amazon: ci...
Batterie EV riconfigurabili: fino al 20%...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:06.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v