Rautezeichen



  • ich möchte den INPUT zahl mit Tastaur eingeben es funktioniert auch aber es blinkt einmal und geht weider weg

    char INPUT[3];
    
                  printf("\n\nBitte eine Fahrkarte waehlen :  ");
    	      scanf("%s",&INPUT);
    

    was muss ich machen damit es funktioniert besser gesagt warum blinkt es einmal und geht weg? 😞 ?



  • Versuch mal folgendes:

    char INPUT[3];
    
    printf("\n\nBitte eine Fahrkarte waehlen :  ");
    
    fgets(INPUT, 3, stdin); // Die 3 wie bei char INPUT[3]
    


  • scanf("%s",INPUT);
    

    Ein Chararray braucht kein Adressoperator...



  • Danke mit fgets funktioniert wunderbar,ihr seid echt hilfsbereit und cool danke danke



  • Hi Leute ich habe ein neues Problem könnte ihr bitte mir sagen wo ich was ändres soll. ich bedanke mich schon jetzt 100 mal

    ........
    
            char Z[10];
    	int g ;
    	int wg;
    	int e;
    
       do 
    	    {
    	      printf("Zahl1 ein geben  :  ");
    	      scanf("%d",&g);
    	    } while (g < 1);  // Nur positive Zahlen
    
    	      printf("\n zahl2   :  ");
    	      scanf("%d",&wg);
    
    		  e = g-wg;
    		  e = Z[10];
    
        for (i = 0; i < 5; ++i)
        { 
            for (j = 0; j < strlen(Z); ++j)  
                     switch (Z[j]) 
                    { 
                    case ',': 
                        printf("%s", Komma[i]); 
                        break; string
    
    .............
    


  • Du musst schon sagen, was nicht geht (Fehlermeldungen, etc.).



  • ich möchte, das Ergebnis e in Z[10] speichern,

    e = g-wg;
    		e= Z[10];
    

    die sind meine Warnungen :

    Warning 1 warning C4996: 'scanf' was declared deprecated c:\users\neo\desktop\munzen\mu\mu\mu.c 35
    Warning 2 warning C4996: 'scanf' was declared deprecated c:\users\neo\desktop\munzen\mu\mu\mu.c 39
    Warning 3 warning C4018: '<' : signed/unsigned mismatch c:\users\neo\desktop\munzen\mu\mu\mu.c 47
    Warning 4 warning C4700: uninitialized local variable 'Z' used c:\users\neo\desktop\munzen\mu\mu\mu.c 42



  • Z[10]=e;
    

    wäre da zweckdienlicher.



  • Athar schrieb:

    Z[10]=e;
    

    wäre da zweckdienlicher.

    halloooo jemand zu hause oder sind hier nur dfogen junkeys unterwegs

    llg lolo



  • ,onResize(obj.container gay){
    this.gayLords = obj.container gay
    }

    hey ho()......



  • Tag ,

    ich habe auch mit

    Z[10]=e;
    

    hats auch nicht gebracht.
    das Programm startet, ich kann zahl1 und zahl2 eingeben aber dann kommt zack diese Fehler Meldung :

    "Run-Time Check Failure #2 - Stack around the variable 'Z' was corrupted."

    und zum Auswahl ist
    Break und Continue

    lg



  • Du machst mir Spaß... wenn Z nur 10 Elemente hat, kannst du nicht auf's 11te (Z[10]) zugreifen. Und unten das strlen(Z) ist ja auch hochinteressant...

    was hast du eigentlich genau vor?



  • Z kennt dein Compiler nicht, oder hast du das in dem nicht geposteten Quelltext definiert? Die 4. Warnung sagt du hast das nicht oder dein Compiler versteht nicht was du ihm beibringen wolltest.

    Da er es nicht kennt, kann da jeder beliebige Wert drin stehen - bei sehr grossen Werten bekommst du halt einen Stacküberlauf.



  • Hier ist mein gesamte Quellcode

    #include <stdafx.h> 
    #include <stdio.h> 
    #include <string.h> 
    
    int main(void) 
    {	
    	// deklaration
    
        int j,i; 
        char Komma[5][6] =    {"     ", "     ", "     ", "     ", "    *"}; 
        char Null[5][6] =   {"#####", "*   #", "#   #", "#   #", "#####"}; 
        char Eins[5][6] =   {"    #", "  # #", "#   #", "    #", "    #"}; 
    	char Zwei[5][6] =   {"#####", "    #", "#####", "#    ", "#####"};
    	char Drei[5][6] =   {"#####", "    #", "#####", "    #", "#####"};
    	char Vier[5][6] =   {"#   #", "#   #", "#####", "    #", "    #"};
    	char Fuenf[5][6] =  {"#####", "#    ", "#####", "    #", "#####"};
    	char Sechs[5][6] =  {"#####", "    #", "#####", "#   #", "#####"};
    	char Sieben[5][6] = {"#####", "    #", "   # ", "  #  ", " #   "};
    	char Acht[5][6] =   {"#####", "#   #", "#####", "#   #", "#####"};
    	char Neun[5][6] =   {"#####", "#   #", "#####", "    #", "#####"};
    	char Z[10];
    	int g ;
    	int wg;
    	int e;
    
    		/*  printf("\n\nBitte eine Zahl waehlen :  \n\n\n");
    		  fgets(Z, 10, stdin); //wird benutzt, um eine Zeile aus einem externen File zu lesen indiesem Fall von externe Eingabe.
    	      printf("\n\n"); // abstand zwischen eingabe und ausgabe*/
    
       do 
    	    {
    	      printf("Zahl1 ein geben  :  ");
    	      scanf("%d",&g);
    	    } while (g < 1);  // Nur positive Zahlen
    
    	      printf("\n zahl2   :  ");
    	      scanf("%d",&wg);
    
    		  e = g-wg;
    		  Z[10]=e;
    
    	 //printf("\n\n bitte geben Sie errechnet wert ein :  \n\n\n");
    		//fgets(Z,10, stdin);
    
        for (i = 0; i < 5; ++i) // schleife um 5 mal Rautezeichen in 5 reihen 
        { 
            for (j = 0; j < strlen(Z); ++j)  // strlen bestimmt die länge von string
            { 
                switch (Z[j])  // die Schubladen
                { 
                    case ',': 
                        printf("%s", Komma[i]); 
                        break; 
    
                    case '0': 
                        printf("%s", Null[i]); 
                        break; 
    
                    case '1': 
                        printf("%s", Eins[i]); 
                        break; 
    				case '2': 
                        printf("%s", Zwei[i]); 
                        break; 
    				case '3': 
                        printf("%s", Drei[i]); 
                        break; 
    				case '4': 
                        printf("%s", Vier[i]); 
                        break; 
    				 case '5': 
                        printf("%s", Fuenf[i]); 
                        break; 
    				case '6': 
                        printf("%s", Sechs[i]); 
                        break; 
    				case '7': 
                        printf("%s", Sieben[i]); 
                        break; 
    				case '8': 
                        printf("%s", Acht[i]); 
                        break; 
    				case '9': 
                        printf("%s", Neun[i]); 
                        break; 
                } 
               printf("   "); // abstandhalter zwischen 2 ziffern 
            } 
    
            printf("\n");  // nach jede array eine Zeile runter kommen
        } 
    
        return getchar(); 
    }
    

    ich habe viele Variante versucht aber irgendwie geht nicht.

    momentan hänge ich an 2. teil fest.

    1. teil: war für mich die zahlen als Rautenzeichen anzeigen lassen
    2. teil : Ergebnis von zahl1 und zahl 2 als rauter Zeichen anzeigen lassen
    und der 3. teil : soll solange laufen bis Ergebnis gleich null ist

    lg



  • ich hab auch mal bissl herumgebastelt. Hoffe, das es etwa C entspricht.
    Dein switch-case und dein Rautencontainer .. also des waren mir zu viel Variablen. Und ich habe 4*7 als Größenordnung verwendet.

    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
    	int character, line, row;
    	int ascii, index;
    	char input[20];
    	char numbers[11][29] =
    		{
    			{ "#####  ##  ##  ##  ##  #####" },
    			{ "   #   #   #   #   #   #   #" },
    			{ "####   #   ######   #   ####" },
    			{ "####   #   #####   #   #####" },
    			{ "#  ##  ##  #####   #   #   #" },
    			{ "#####   #   ####   #   #####" },
    			{ "#####   #   #####  ##  #####" },
    			{ "####   #   #   #   #   #   #" },
    			{ "#####  ##  ######  ##  #####" },
    			{ "#####  ##  #####   #   #####" },
    			{ "                         #  " }
    		};
    
    	do
    	{
    		// Einlesen der Zahlen
    		scanf("%s", input);
    
    		for(row=0; row<7; ++row)
    		{
    			for(character=0; character<strlen(input); ++character)
    			{
    				ascii = (int)input[character];
    				index = -1;
    
    				// Sonderbehandlung fuer Kommata
    				if(ascii == 46)
    					index = 10;
    				// Zahlen 0-9
    				else if(ascii >= 48 && ascii <= 57)
    					index = ascii-48;
    
    				if(index >= 0 && index <= 10)
    				{
    					for(line=0; line<4; ++line)
    					{
    						printf("%c", numbers[index][row*4+line]);
    					}
    					printf("  ");
    				}
    			}
    			printf("\n");
    		}
    
    	} while(input[0] != 'q');
    
    	return 0;
    }
    

    😃 ist vielleicht net unbedingt perfekt.



  • Hi
    @ BasicMan01 vielen danke

    aber wie kann ich hier etwas Rechnung rein packen
    es soll von zahl1 dem zahl2 solange abziehen bis zahl1 null wird auch bei jede Eingabe von zahl2 das zwischen-Ergebnis zeigen lassen

    10-3=7 zeigen lassen
    7-5= 2 zeigen lassen
    2-2= 0 zeigen lassen
    diese abziehen und zeigen lassen ist mein Hauptproblem 😞

    lg



  • In dem Fall würde ich zunächst ersteinmal die Ausgabe auf der Konsole in eine
    Funktion stecken. Als Übergabeparameter den Zahlenstring. (im prinzip das bisherige Programm 😃 )

    kleines Beispiel Fahrkartenautomat:
    User möchte eine Karte kaufen im Wert von 2,60

    Ausgabe auf der Konsole 2,60 (mittels der geschriebenen Funktion)
    User wirft ein 2,00 Stück ein.
    du rechnest 2,60 - 2,00 und gibst das Ergebnis (0,60) an die Ausgabefunktion
    Ausgabe auf der Konsole 0,60
    User wirft ein 50 Cent Stück ein
    du rechnest 0,60 - 0,50 und gibst das Ergebnis (0,10) an die Ausgabefunktion
    Ausgabe auf der Konsole 0,10
    User wirft ein 10 Cent Stück ein
    du rechnest 0,10 - 0,10 und gibst das Ergebnis (0,00) an die Ausgabefunktion

    Ohne Funktion wird es sehr Unübersichtlich.

    Auch kannst du einen double einlesen anstatt eines C-Strings. Das macht sich für eine Rechnung einfacher. Für die Ausgabe wäre dann ein String besser.
    Zum Casten bzw. umwandeln kannst du sprintf() verwenden.



  • Wenn ich mich da auch einmischen darf, ich hab so etwas in der Art noch hier rumliegen:

    #include <ctype.h>
    #include <stddef.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    #ifdef _WIN32
    #  define NOMINMAX
    #  include <windows.h>
    #else
    #  include <fcntl.h>
    #  include <sys/ioctl.h>
    #  include <unistd.h>
    #endif
    
    static size_t get_term_columns(void) {
      size_t cols = 80;
    
    #ifdef _WIN32
      HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
      CONSOLE_SCREEN_BUFFER_INFO info;
    
      if(GetConsoleScreenBufferInfo(h, &info)) {
        cols = info.dwSize.X;
      }
    #else
      char const *col_env = getenv("COLUMNS");
    
      if(!col_env || sscanf(col_env, "%lu", &cols) != 1) {
        struct winsize wsz;
        if(!ioctl(STDOUT_FILENO, TIOCGWINSZ, &wsz)) {
          cols = wsz.ws_col;
        }
      }
    #endif
    
      return cols;
    }
    
    static size_t size_t_max(size_t x, size_t y) {
      return x > y ? x : y;
    }
    
    static void print_phrase(char const *s) {
      static char const font[][97] = {
       /* !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~*/
        "@DJ@DSBDHB@@@@@PNDNNH_L_NN@@H@BNNNONO__NQDPQAQQNONON_QQQQQ_NAND@D@A@P@L@ADPAF@@@@@@@D@@@@@@HDB@",
        "@DJJNSEDDDJD@@@PQFQQLABPQQ@@D@DQQQQQQAAQQDPIA[QQQQQQDQQQQQPBAHJ@H@A@P@B@A@@AD@@@@@@@D@@@@@@DDD@",
        "@D@_AHE@DDND@@@HYDPPJAAHQQDDB_HPYQQAQAAAQDPEAUSQQQQADQQQJJHBBHQ@@NON^NB^OFXIDKGNO^MNNQQQQQ_DDDV",
        "@D@JNDB@DD__@_@DUDHLIOODN^@@A@PHU_OAQOOA_DPCAQUQOQONDQQQDDDBDH@@@PQQQQOQQDPEDUIQQQRADQQQJQHBDHM",
        "@D@JPBU@DDND@@@BSDDP_PQDQPDDB_HD]QQAQAAYQDPEAQYQAUQPDQQUJDBBHH@@@^QAQOBQQDPCDUIQQQBNDQQUDQDDDD@",
        "@@@_NYI@DDJD@@@AQDBQHQQDQH@BD@D@AQQQQAAQQDPIAQQQAIQQDQJ[QDABPH@@@QQQQAB^QDPEDUIQO^BPDYJUJ^BDDD@",
        "@D@JDYV@HB@@D@DANN_NHNNDNF@@H@BDNQONO_ANQDQQ_QQNAVQNDNDQQD_NPN@_@^ON^NBPQNRINUINAPGNLVDJQP_HDB@",
        "@@@@@@@@@@@@B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@N@@@@@@@@@@@@@@@@@@@@@@@@@@@@N@@L@@@@@AP@@@@@@@N@@@@@"
      };
      static size_t const font_x = 6;
      static size_t const font_y = 8;
    
      /* lpl == letters per line. Zeilenumbrüche werden sehr rudimentär forciert;
       * vernünftige Silbentrennung wäre mir viel zu viel Aufwand. */
      size_t i, j, lpl = size_t_max(get_term_columns() / 6, 1);
      /* "line" hier im Sinne von nach lpl umgebrochenen Zeilen des Eingabetextes */
      char const *pos_line;
      char const *pos_letter;
    
      for(pos_letter = pos_line = s; *pos_letter; pos_line += lpl) {
        for(i = 0; i < font_y; ++i) {
          for(pos_letter = pos_line; *pos_letter && (pos_letter - pos_line) < lpl; ++pos_letter) {
            char c = isprint(*pos_letter) ? *pos_letter : '?';
    
            for(j = 0; j < font_x; ++j) {
              putchar((font[i][c - ' '] >> j & 1) ? '#' : ' ');
            }
          }
          putchar('\n');
        }
      }
    }
    
    int main(int argc, char *argv[]) {
      char text[] =
        " !\"#$%&'()*+,-./0123456789:;<=>?@"
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`"
        "abcdefghijklmnopqrstuvwxyz{|}~";
    
      if(argc == 1) {
        print_phrase(text);
      } else {
        size_t i;
        for(i = 1; i < argc; ++i) {
          print_phrase(argv[i]);
        }
      }
    
      return 0;
    }
    

    Der wichtige Teil ist in der Funktion "print_phrase". Das große Array ist eine 6x8-Schrift, die die 96 druckbaren ASCII-Zeichen (Leerzeichen bis Tilde) umfasst und so kodiert ist, dass die niederwertigsten 6 bit eines Zeichens die Darstellung der betreffenden Zeile kodieren. Etwa ist Z so kodiert:

    _ = 11111001 -> "##### "
    P = 00001001 -> "    # "
    H = 00010001 -> "   #  "
    D = 00100001 -> "  #   "
    B = 01000001 -> " #    "
    A = 10000001 -> "#     "
    _ = 11111001 -> "##### "
    @ = 00000000 -> "      "
    

    (Binärdarstellung in LSB-Notation).

    Der restliche Code ist dann nur noch, zu erkennen, wie viele Zeichen nebeneinander in eine Zeile passen und diese dann zeilenweise nebeneinander runterzuschreiben.



  • Hi,

    ja genau hier liegt das Problem ich kriege die Rechnung ausgabe nicht in variable Z in diesem Fall rein also meine aus gerechnete wert ist ein int wert aber Z ist ein char.

    int a,b,c;
            char Z[10];
    
    	printf("zahl1");
    	scanf("%d",&a);
    	printf("zahl2");
    	scanf("%d",&b);
    	c=a+b;
    	printf("%d",&c);
    

    wie kann ich den wert von c im Z rein schreiben?

    lg



  • sprintf(Z, "%d", c);
    

Anmelden zum Antworten