Wie kann ich statt 1 und 0 ....Ein und Aus anzeigen``???



  • Meine Ausgabe sieht merkwürdig aus wenn ich das mit der Methode von Andromeda versuche.

    Ausgabe
    http://www.bilder-upload.eu/thumb/501351-1482083347.png

    #include <stdio.h> 	
    #include <stdlib.h> 
    
    int main(void) { 
    
    int main(void) {
    
    	//Variable Schalter werden definiert
    	//Lampe an = s1s2 + s3s5 + s4s5
    	int s1=0,s2=0,s3=0,s4=0,s5=0,j;
    	char L = "AUS";
    
    	//Schalterstellung darstellen(in Tabellenform)
    	printf("Fall\t S1\t S2\t S3\t S4\t S5\t L\t\n");
    
    	//Durchlaufbedingung: Führe aus, solange j zwischen 1 und 32 ist, erhöhe j um eins
    	for (j=1;j<=32;j++)
    	{
    
    		//Tabellenkopf wird ausgegeben
    		printf("%d\t %d\t %d\t %d\t %d\t %d\t\n" ,j,s1,s2,s3,s4,s5);
    		puts(L);
    
    		//S1 Spalte; wenn Bedingung erfüllt, ist Schalter 1 an
    		if (j>=16)
    		{
    			s1=1;
    		}
    		//S2 Spalte; wenn Bedingung erfüllt, ist Schalter 2 an
    		if ((j>=8 && j<=15)||(j>=24 && j<=32))
    		{
    			s2=1;
    		}
    		else
    		{
    			s2=0; //Andernfalls bei nicht erfüllter Bedingung, ist Schalter 2 aus
    		}
    		//S3 Spalte; wenn Bedingung erfüllt, s3=an
    		if ((j>=4 && j<=7)||(j>=12 && j<=15)||(j>=20 && j<=23)||(j>=28 && j<=32))
    		{
    			s3=1;
    		}
    		else
    		{
    			s3=0; //Andernfalls ist der Schalter aus
    		}
    		//S4 Spalte; wenn Bedingung erfüllt, s4=an
    		if ((j>=2 && j<=3)||(j>=6 && j<=7)||(j>=10 && j<=11)||(j>=14 && j<=15)
    				||(j>=18 && j<=19)||(j>=22 && j<=23)||(j>=26 && j<=27)||(j>=30 && j<=31))
    		{
    			s4=1;
    		}
    		else
    		{
    			s4=0; //Andernfalls ist Schalter 4 aus
    		}
    		//S5 Spalte; wenn Bedingung erfüllt ist s5=an
    		if(j==1||j==3||j==5||j==7||j==9||j==11||j==13||j==15
    				||j==17||j==19||j==21||j==23||j==25||j==27||j==29||j==31)
    		{
    			s5=1;
    		}
    		else
    		{
    			s5=0; //Andernfalls ist Schalter 5 aus
    		}
    		//Lampe leuchtet wenn: S1 und S2 = 1; oder S3 und S5 = 1, oder S4 und S5 = 1
    		if ((s1==1 && s2==1)||(s3==1 && s5==1) || (s4==1 && s5==1))
    		{
    			L="Ein";
    		}
    		else
    		{
    			L="Aus"; //Andernfalls ist die Lampe aus
    		}
    	}
    	printf("\nLegende: Schalter\nLampe AUS=0; Schalter/Lampe AN=1"
    			"\n\t Schalter=S; Lampe=L"); //Textausgabe um Legende anzuzeigen
    	return 0;
    
    }
    


  • Andromeda schrieb:

    DirkB schrieb:

    Andromeda schrieb:

    Der Compiler wird jeden Wert >1 zu 1 machen. Und 0 bleibt 0.

    Besser
    Der Compiler wird jeden Wert !=0 zu 1 machen. Und 0 bleibt 0.

    Tja, wegen solcher fiesen Hacks haben Hi-Level-Sprachen einen Boolean-Datentyp.

    Das funktioniert auch ohne !!.
    Mit wird aber der Wertebereich passend für das Array eingeschränkt.

    Andromeda schrieb:

    !!x sieht scheußlich aus. Nimm besser x&1. 🙂

    Das ist a) falsch und b) sieht es auch sche... aus.

    x&&1 würde noch gehen oder x||0 (du kannst die Ziffern auch durch x ersetzen).



  • Frost1989 schrieb:

    Meine Ausgabe sieht merkwürdig aus wenn ich das mit der Methode von Andromeda versuche.

    char L = "AUS";
    

    Das hat Andromeda auch nicht geschrieben.
    Und der Compiler müßte dir einen Haufen Warnungen um die Ohren hauen.
    Damit solltest du das Programm gar nicht erst laufen lassen.

    Behebe die Ursachen für die Warnungen.



  • Nicht char L sondern char* L

    Du brauchst einen Pointer.
    Sonst hast du nur ein Zeichen in L.



  • Andromeda schrieb:

    Nicht char L sondern char* L

    Du brauchst einen Pointer.
    Sonst hast du nur ein Zeichen in L.

    Und das ist das LSB von der Adresse, an der "AUS" steht.
    Und das hat recht wenig mit dem Inhalt zu tun.



  • ok tatsächlich,

    🙂 🙂 🙂

    es funktioniert nun für L

    aber L wird jetzt in der ersten Spalte asugegeben.

    Wie kann ich das hinbekommen dass es in der Spalte für "L" ausgegeben wird.

    und ich vermute mal ich kann es für s1 bis s5 auch so wir für L machen`?





  • puts gibt einen String aus und hängt ein Newline ('\n') automatisch hinten dran.

    printf ist die Abkürzung von print formatted. Also formatierte Ausgabe.

    Wie kannst du mit printf einen String ausgeben.

    Aber vielleicht kommst du dann dahinter, das der Weg von Andromeda einfach aussieht, aber sehr unübersichtlich wird.



  • mit anderen worten ich kann es mit der string methode nicht mehr formatiert ausgeben??

    Die Aufgabenstellung erfordert eine formatierte Ausgabe...

    😞



  • Frost1989 schrieb:

    mit anderen worten ich kann es mit der string methode nicht mehr formatiert ausgeben??

    Die Aufgabenstellung erfordert eine formatierte Ausgabe...

    😞

    Statt

    printf("%d\t %d\t %d\t %d\t %d\t %d\t\n" ,j,s1,s2,s3,s4,s5); 
    puts(L);
    

    Probiers mal so:

    printf("%d\t %d\t %d\t %d\t %d\t %d\t %s\n" ,j,s1,s2,s3,s4,s5, L);
    

    🙂



  • Frost1989 schrieb:

    mit anderen worten ich kann es mit der string methode nicht mehr formatiert ausgeben??
    😞

    Wer hat behauptet, dass man mit printf keine Strings ausgeben kann?
    Du kannst Strings mit printf sogar sehr gut formatiert ausgeben.
    Du kannst die Ausgabebreite begrenzen, bzw. vorgeben. Auch links- oder rechtsbündig geht.



  • @Frost: Du nervst! Machst du jetzt für jeden Furz ein neues Thema auf? Kauf dir Bücher und lerne programmieren.


Anmelden zum Antworten