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

    [c] Conta degli spazi ed endo of file

    Ciao a tutti, vorrei fare un programma che nel main acquisisce una stringa e in una funzione conta il numero di caratteri acquisiti e il numero di spazi nella stringa.
    Il problema è che se la stringa è "ciao mi chiamo megaempire" il compilatore arriva al primo spazio e si ferma, conta 4 caratteri e 0 spazi.
    Ho provato a fare il debug e quando arriva allo spazio dopo ciao il carattere è '\0' quindi è normale che esce ma perché c'è il carattere di fine stringa???
    codice:
    #include <stdio.h>
    void genera(char s1[],int *a, int*b);
    void main()
    {
        char s[100];
        printf("Inserisci la frase che poi i giocatori andranno a cercare : ");
        scanf("%s",s);
        int i1 = 0;
        int spazi;
        genera(s,&i1,&spazi);
        printf("%d %d", i1,spazi);
    }
    
    void genera(char s1[],int *a, int*b)
    {
        int agen = *a;
        int bgen = 0;
        while ( s1[agen] != '\0')
        {
            if (s1[agen] == ' ')
            {
                bgen ++;
            }
            agen++;
        }
        *a = agen;
        *b = bgen;
    }

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [c] Conta degli spazi ed endo of file

    scanf() se non istruita si ferma al primo spazio che trova

    Ti conviene comunque usare fgets.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    cosa intendi per non istruita? getf() non l'ho mai utilizzata...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    getf() non l'ho mai utilizzata...
    fgets
    ..come terzo parametro ci metti stdin ..

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da megaempire
    cosa intendi per non istruita?
    Basta leggere la documentazione e vedere gli specificatori accettati dalla funzione.
    Ad esempio:

    scanf("%[A-Z a-z]", s);

    fgets è comunque la soluzione migliore, anche dal punto di vista della sicurezza.


    Originariamente inviato da megaempire
    getf() non l'ho mai utilizzata...
    getf non so cosa sia, io parlavo di fgets. Online trovi tutta la documentazione che ti serve
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6

    Moderazione

    Ti ricordo che il codice va specificato tra tag [CODE] ... [/CODE], altrimenti perde l'indentazione.

    Ora correggo io, in futuro imposta correttamente la discussione fin da subito.


    (per inciso, è int main, non void main)
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    ok grazie mille

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.