Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [C++] Domanda niubba Scanf :)

    Un saluto a tutti mi sapete dire il perchè se faccio questa funzione:

    Codice PHP:
    char line[] = "NOT ( battery AND DC ) ;"
    char *ptr line;
    char field[2000];
    int n;
    while ( 
    sscanf(ptr"%s%n"field, &n) == )
        {
        
    printf("field = %s\n"field);
        
    ptr ptr 1;
            if ( *
    ptr == ';' )
            {
                break;
            }
        } 
    Funziona perfettamente, nel senso che riesco a visualizzare/parsare tutte le singole parole immesse fino al ";".

    Mentre se la char line la faccio inserire dall'utente, cosi:

    Codice PHP:
    char line[2000];
    printf("Scrivi la frase termina con un \" ;\". Esempio: NOT ( battery AND DC ) ;\n");
    scanf("%s",line);
    char *ptr line;
    char field[2000];
    int n;
    while ( 
    sscanf(ptr"%s%n"field, &n) == )
        {
        
    printf("field = %s\n"field);
        
    ptr ptr 1;
            if ( *
    ptr == ';' )
            {
                break;
            }
        } 
    Non funziona, nel senso che in output ottengo la prima parola (NOT), come seconda parola un carattere ascii a casaccio e poi esce

    Grazie a tutti

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La scanf ottiene solamente la prima parola e non la linea.

    Usa la

    fgets

    con lo stdin.

    P.S. Attenzione al titolo ... deve essere significativo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463

    Moderazione

    Originariamente inviato da Giacomo1978
    [C++] Domanda niubba Scanf
    Usa titoli più significativi in futuro, come da Regolamento.
    Questo l'ho corretto io.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Originariamente inviato da oregon
    La scanf ottiene solamente la prima parola e non la linea.
    Usa la
    fgets
    con lo stdin.
    P.S. Attenzione al titolo ... deve essere significativo ...
    Grazie per la risposta,
    avevo provato ad utilizzare la (f)gets, ma con scarsi risultati nel senso che il programma passa oltre, non si ferma per accettare l'input dell'utente.

    Codice PHP:
    char line[2000];
    //memset (line,'0',2000);
    printf("Scrivi la frase, termina con un \" ;\". Esempio: NOT ( battery AND DC ) ;");
    fgets(line1999stdin);
    char *ptr line;
    char field[2000];
    int n;
    while ( 
    sscanf(ptr"%s%n"field, &n) == )
        {
        
    printf("field = %s\n"field);
        
    ptr ptr 1;
            if ( *
    ptr == ';' )
            {
                break;
            }
        } 
    P.S.
    Scusate per il titolo poco "ortodosso"

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    A me sembra che funzioni ... che problema hai?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Originariamente inviato da oregon
    A me sembra che funzioni ... che problema hai?
    In pratica il programma "non si ferma" per accettare l'input dell'utente, passa oltre e va diritto al while

    P.S.
    Grazie alka per l'edit del titolo

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il codice che hai mostrato, non fa quanto dici ma lavora correttamente.

    A meno che non ci sia altro codice PRIMA, che non hai mostrato ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Originariamente inviato da oregon
    Il codice che hai mostrato, non fa quanto dici ma lavora correttamente.

    A meno che non ci sia altro codice PRIMA, che non hai mostrato ...
    Hai perfettamente ragione.
    Ho creato un nuovo progetto vuoto e il programma funge!

    Ora non riesco a capire perchè nel progetto "madre" la funzione non va
    Una cosa però ho notato facendo il debug, che la variabile line assume, prima della fgets:
    nel primo caso (quello non funzionante) questo valore "/n......" ed altri caratteri (in pratica incomincia con un "/n").
    nel secondo caso (quello funzionante, di prova) incomincia con "+\""\0..."

    Secondo me è questo il problema.
    Ho provato ad utilizzare il memset (line,'0',2000); ma nada ancora problemi
    Qualche idea?

    Grazie!

    P.S.
    prima di quel codice non c'è niente che può dare fastidio alla fgets ne sono sicuro al 100%

  9. #9
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Hai provato gets(line) ???

  10. #10
    Originariamente inviato da KrOW
    Hai provato gets(line) ???
    Si, provato...niente

    Vi posto le foto del debug.

    Queste sono relative al programma dove non funziona.
    In pratica non si "blocca" per accettare l'input dell'utente (notare il valore che assume line, dopo la fgets)




    Queste sono relative al programma di prova dove invece funge :rollo:


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 © 2025 vBulletin Solutions, Inc. All rights reserved.