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

    [C] problema con while e getchar

    Salve ragazzi sono nuovo del forum,spero di trovarmi bene

    Vorrei chiedervi una cosa che mi sta facendo diventare pazzo...ho un programmino semplicissimo che oltre alle dichiarazioni e ad una printf ha solo questo:
    printf("Inserisci la stringa: ");
    while((c=getchar()) != '\n'){
    stringa[i]=c;
    i++;
    }
    lunghezza=strlen(stringa);

    e fin qui tutto bene,il programma funziona...

    Se metto quella stessa parte all'interno di un altro programma più grande non mi funziona la getchar(), non mi da proprio la possibilità di inserire caratteri..perchè?!tra l'altro nel debug mi dice,senza scrivere niente,che c contiene questo valore: 10 ''
    debug fatto con visual studio 2008 express ed.,con devc++ non si capisce niente il debug!
    ah stringa è definito come: char stringa[MAX_NUM]={0}; con MAX_NUM=100 e la variabile c ho provato anche a porla =0 subito prima del while.
    Ragazzi aiutatemi,non so più che faree a chi rivolgermi!!da cosa può dipendere?!
    Ciao e grazie!

  2. #2
    oppure potreste dirmi se c'è un altro modo per inserire una stringa in un array senza che l'utente dica esplicitamente di quanti caratteri deve essere composta?!mi viene solo in mente la getchar finchè non trova '\n'...Grazie..

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: [C] problema con while e getchar

    Originariamente inviato da m3t4lup
    Se metto quella stessa parte all'interno di un altro programma più grande non mi funziona la getchar(), non mi da proprio la possibilità di inserire caratteri..perchè?!
    Perché magari sono rimasti dei caratteri nel buffer di input .... nel programma hai usato scanf???

    Originariamente inviato da m3t4lup
    oppure potreste dirmi se c'è un altro modo per inserire una stringa in un array senza che l'utente dica esplicitamente di quanti caratteri deve essere composta?!
    Sì, certo che è possibile. In questa discussione ad esempio avevo postato una funzione per leggere una linea di lunghezza arbitraria da uno "stream", facendo uso di fgets e di un attento ridimensionamento del buffer tramite realloc.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    ma fgets non è per i files?e non vorrei utilizzare malloc e ralloc perchè ancora non ha spiegato i puntatori(anche se li saprei usare )
    si ho usato una scanf all'interno del programma ma non ho mai usato la variabile c in altri casi...sembra che come primo carattere venga immesso un newline senza però verlo mai digitato!siccome prima c'è la selezione da un case,potrebbe essere quello?ma anche se c la setto a 0 subito prima fa sto casino..

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da m3t4lup
    ma fgets non è per i files?
    fgets, in generale, legge da uno "stream". Se poi lo stream lo hai aperto con fopen() o hai usato lo stream predefinito standard "stdin", questo non importa alla fgets.

    Originariamente inviato da m3t4lup
    e non vorrei utilizzare malloc e ralloc perchè ancora non ha spiegato i puntatori(anche se li saprei usare )
    Peccato...

    Originariamente inviato da m3t4lup
    si ho usato una scanf all'interno del programma
    È il solito stranoto problema della scanf. Perché legge caratteri finché essi corrispondono allo specificato di formato ma al primo carattere che non corrisponde più, scanf si ferma e termina l'input ma quel carattere rimane nel buffer.

    scanf ("%d", &val);

    Con %d accetta cifre decimali ma il newline non è compreso tra questi. Appena trova il newline (perché hai premuto INVIO), la scanf termina, ma il newline rimane nel buffer. Immagina cosa succede se subito dopo usi getchar....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  6. #6
    è vero,non ci avevo pensato!infatti prima del getchar c'è una scanf x la scelta nel menu che come dici tu mi lascia nel buffer il newline..quindi dovrei mettere un getchar x lo switch giusto?anche xchè deve prendere solo un carattere..
    Appena posso lo provo..ti farò sapere..intanto ti ringrazio..

  7. #7

    non vaaaa!non so come muovermi..vi posto il programma semplificato nel punto in cui dà l'errore..

    codice:
    #include <stdio.h>
    #define MAX_NUM 100
    
    int main(){
           char scelta=0;
           int i=0,j=0,lunghezza=0;
           char c=0;
           char stringa[MAX_NUM]={0};
           printf("Effettua la scelta\n");       
           scelta=getchar();
           switch (scelta){
                  case '1':
                       printf("Opzione1\n");
                       break;
                  case '2':
                       while((c=getchar()) != '\n'){
                           stringa[i]=c;
                           i++;
                       }
                       lunghezza=strlen(stringa);
                       for (j=0;j<=lunghezza-1;j++){
                           printf("%c",stringa[j]);
                       }
                       break;
                  default:
                       printf("Selezione non valida\n");
           }
           system("PAUSE");
           return 0;
    }
    è di una stupidità unica ma non capisco dove possa essere il problema...il contenuto di c con il debug è sempre 10 '' che non so cosa significhi..anzi,l'ho capito,è il line feed..come sospettavo..
    Se è possibile contattatemi con un mp scrivendomi l'indirizzo di msn..così ci consultiamo lì..

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Scusa ma anche se ho letto tutto il thread ... cosa c'e' che "non va" ... di quale "errore" parli?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    il problema sta nel while del case 2 o meglio nel getchar che non va...non mi chiede la stringa...è come se trova già il carattere \n che non ho mai messo....

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Lavori con windows ...? Usa

    codice:
        ...
        case '2':
           fflush(stdin);
           ...
    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.