Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] Controllare che la scanf abbia letto INVIO

    Salve a tutti,
    avrei un problema, con le seguenti scanf sto leggendo da tastiera nome simbolico e numero di porta di un server a cui mi devo connettere:
    codice:
           [..]
    	scanf("%s",simbolic_name);
    	scanf("%d",&port);
           [..]
    Ora però vorrei fare che se uno nelle due scanf non scrive niente e clicca solo invio due volte mi metta indirizzo ip di default (localhost) e porta di default (55123).

    Il problema è che come lo faccio il confronto con l'if? la scanf come me la rappresenta la stringa letta?
    Perchè per il nome simbolico ho già provato sia a scrivere == '\n', sia a fare la strcmp con '\n' ma nulla. Per la porta ho letto che il in decimale l'invio è 13 e quindi ho provato a confrontare la variabile port con 13 ma nulla nemmeno li.
    Qualche consiglio?

    Dimenticavo simbolic_name è un vettore di 100 char, porta invece è un semplice intero.

    Vi ringrazio in anticipo,
    Neptune.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Non lo fai con la scanf.

    Usa la funzione fgets

    fgets(symbolic_name, sizeof(symbolic_name), stdin);

    Se dai solo invio, nella stringa avrai un solo carattere (LF ascii 10).

    Per il valore numerico, dovrai utilizzare una stringa temporanea e la funzione di conversione atoi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Domanda sempre sulle stringhe, ma perchè se ho questo vettore di caratteri:

    codice:
    char echoString[ECHOMAX] = "Ciao Server!";
    e lo spedisco tramite socket udp:

    codice:
    if (sendto(sock, echoString, echoStringLen, 0, (struct sockaddr*)&echoServAddr, sizeof(echoServAddr)) != echoStringLen)
    								ErrorHandler("sendto() sent different number of bytes than expected");
    ricevo la stringa e la stampo
    codice:
    		//RICEVO UNA STRINGA DAL CLIENT
    		recvMsgSize = recvfrom(sock, echoBuffer, ECHOMAX, 0, (struct sockaddr*)&echoClntAddr, &cliAddrLen);
    quello che mi viene stampato è:
    codice:
    Ciao Servr!?+?d??_?
    Dov'è che sbaglio?!?
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    La send non invia il NUL che chiude una stringa C. Dovrai quindi aggiungerlo tu dopo la ricezione nel buffer altrimenti vedrai la memoria "oltre" la fine della stringa.

    Quei caratteri "sporchi" non li hai ricevuti ... sono quelli che hai in memoria dove ricevi e che non dovresti visualizzare.

    P.S. Non fare domande in thread che non hanno attinenza. Apri un thread nuovo con un titolo adeguato.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.