Problem mit getchar()



  • Also habe folgenden Programmteil:

    while((sign[0]==getchar())!='.'){
    
    	idx=sign[0];
    
    	printf("\n Eingabe gemacht: %c",sign[0]);
    
    	if (TEST_BIT(bfv,idx)>0)
    		printf("\n Bit bereits gesetzt");
    
    	else{
    	BFV_SET(bfv,idx);
    		printf("\n Bit wurde gesetzt");
    		insert_string_at_end(&listroot, &listend, sign);
    	}
    }
    

    ich will nur das eingegebene Zeichen ohne EOF, um es in einem Bitfeld zu setzten. Hab auch ne Version mit getch() aber die läuft ja unter Linux nicht.

    Dummerweise rennt er mir Zweimal durch die Schleife, obwohl ich nur eine Eingabe mache z.B. 'a' und dann Enter

    Ausgabe ist dann:

    Eingabe gemacht: a
    Bit wurde gesetzt
    Eingabe gemacht: a
    Bit bereits gesetzt

    Kann mir jmd hier helfen...steh mit meine Fuß, der wohl festgenagelt scheint, aufm schlauch 😉



  • eine möglichkeit wäre, wenn du wirklich nur ein zeichen einlesen willst auf
    das while-konstrukt zu verzichten. die andere wäre line-orientated input:

    http://www.gnu.org/software/libc/manual/html_mono/libc.html#Line-Input
    

    vielleicht hilft das weiter 🙂



  • hab grad gesehn, das noch ne nicht ganz funktionieren variante war...momentan is das hier, aber gleiches Problem -.-

    sign[0]=0;
    
    while(sign[0]!='.'){
    
    	sign[0]=getchar();
    	idx=sign[0];
    
    	printf("\n Eingabe gemacht: %c",sign[0]);
    
    	if (TEST_BIT(bfv,idx)>0)
    		printf("\n bereits gesetzt\n");
    
    	else{
    	BFV_SET(bfv,idx);
    		printf("\n wurde gesetzt\n");
    		insert_string_at_end(&listroot, &listend, sign);
    	}
    }
    


  • Jah, also ich will schon mehrer Zeichen einlesen, nur nacheinander,sodass ich jedes einzelnd verarbeiten kann ^^



  • also was ich quasi will ist einlesen ohne EOF...bzw, wie kann ich in meinem Fall das EOF rausschmeißen?...

    sorry wegen der vielen posts, aber bei der registrierung ging was schief -.-



  • nach dem getchar eingabepuffer leeren 😉

    void clearbuf()
    {
    	setvbuf(stdin,NULL,_IONBF,0);
        setvbuf(stdin,NULL,_IOFBF,BUFSIZ);
    }
    
    int main()
    {
    	int c = 0;
    
    	do
    	{
    		c = getchar();
    	    clearbuf();
    
    		if ( c != '.' ) // !
    		{
    			// do your stuff
    		}
    
    	}while( c != '.' );
    	return 0;  
    }
    

    🙂



  • sry falscher Thread 😉



  • Im falschen Thread gepostet? 😃



  • _matze schrieb:

    Im falschen Thread gepostet? 😃

    Jah ^^ Falscher Tab... Falscher Thread XD verdammt. ... XD


Log in to reply