Torna indietro   Hardware Upgrade Forum > Software > Programmazione

FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7
FRITZ!Repeater 1700 porta il Wi-Fi 7 dual-band nelle case connesse. Mette a disposizione fino a 2.880 Mbit/s su 5 GHz e 688 Mbit/s su 2,4 GHz, integrazione Mesh immediata via WPS con FRITZ!Box e funzioni smart come MLO per bassa latenza. Compatto, plug-and-play e pronto per il futuro, è la soluzione ideale per chi vuole coprire ogni angolo senza cavi o complicazioni
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica
La Fondazione Chips-IT ha presentato a Pavia il piano strategico 2026-2028 per rafforzare l'ecosistema italiano dei semiconduttori. Con un focus su ricerca, design, talenti e infrastrutture, la Fondazione punta a consolidare il ruolo dell'Italia nel Chips Act europeo, sostenendo innovazione, collaborazione industriale e sovranità tecnologica.
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud
Al Museo Alfa Romeo di Arese, Nutanix ha riunito clienti, partner ed esperti per .Next On Tour Italia e per mostrare come l’infrastruttura hybrid multicloud possa diventare il fondamento dell’innovazione, con una piattaforma capace di unificare applicazioni tradizionali, moderne architetture cloud-native e nuovi scenari basati sull’intelligenza artificiale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-08-2007, 17: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 17:22.
hurricane81 è offline   Rispondi citando il messaggio o parte di esso
Old 31-08-2007, 10:54   #2
andbin
Senior Member
 
L'Avatar di andbin
 
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;
}
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, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica Fondazione Chips-IT, l'Italia alla riscossa nei ...
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud Nutanix: innovazione, semplicità e IA al ...
Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il notebook gaming 'budget' che non ti aspetti Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il n...
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando Due mesi di Battlefield 6: dalla campagna al bat...
Arrivano prima di Natale: ecco le offert...
Offerte record sui robot Dreame: maxi ri...
Pulizia dell'auto agile e senza pensieri...
BYD prepara il motore sincrono a magneti...
La gamma ASUS ExpertBook spiegata: il no...
Lenovo LEGION e LOQ con NVIDIA GeForce R...
Apple perde ancora contro Epic: le commi...
Anche Xiaomi punta sull'IA: con Mi Chat ...
Fire TV Stick 4K in super offerta su Ama...
Prezzi mai visti sui robot MOVA: super a...
Bose QuietComfort mai così convenienti: ...
I fornitori cinesi avvertono: si impenna...
Un nuovo gioco AAA di Alien sarebbe in s...
Apple Studio Display, la seconda generaz...
TV QLED 4K a meno di 300€? Haier da 50 p...
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: 10:33.


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