Abfragen



  • Wie kann ich eine Abfrage machen die anzeigt ob es ein Integer oder ein String ist?
    Das nachfolgende Programm ist ein Spiel: kleiner als grössr als, doch sobald keine Zahl sondern eine Zeichenkette eingegeben wird gebt es ein Fehler.
    Was ist zu tun???

    [#include <stdio.h>
    #include <stdlib.h>

    int x=1,y=0,fzahl;
    int gzahl;

    void main () //Eröffnet das Hauptprogramm
    {
    randomize();
    gzahl= random(100);
    while (x) //x= weitere Berechnung
    {
    printf("Geben sie eine Zahl ein: ");
    scanf("%d",&fzahl);
    if (gzahl>fzahl)
    {
    printf("\nDie Zahl ist groesser\n");
    x=1;
    y=y+1;
    }
    else
    {
    if (gzahl<fzahl)
    {
    printf("\nDie Zahl ist kleiner\n");
    x=1;
    y=y+1;
    }
    else
    {
    y=y+1;
    printf("\nDie Zahl wurde getroffen!!!! ;-))\t");
    printf("Sie haben %d Versuche gebraucht",y);
    printf("\nWollen sie nochmals spielen? Ja=1 Nein=0\t");
    scanf("%d",&x);
    y=0;
    gzahl= random(100);
    }
    }

    }
    getchar();
    getchar();
    }]

    Vielen Dank!!!!!! 😉



  • #include <iostream.h>
    #include <ctype.h>
    #include <string.h>
    
    //Funktion zur Ermillung einer Zahl aus einem String
    int get_number( char * );
    
    int main()
    {
    
    int  izufallszahl  = 10;//diese Zahl kannst du ja vorher noch durch deinen "Zufallszahlen-Generator" ermitteln lassen
    int  itmp		   = 0; 
    bool bnochmal	   = false;
    
    //mit "new char" ohne Groessenangabe bin ich mir nich ganz sicher ob das so gut ist, obwohl es funktioniert,
    //kann sein das das vom freien Speicher abhaengt ob`s grad geht oder eben nich
    char *izahl	       = new char;
    
    do
    {
    	cout<<"\nBitte geben sie ihre Zahl ein: ";
    	cin>>izahl;//Die Eingabe wird in einem String gespeichert
    
    	if((itmp = get_number(izahl)) == false)//nicht sehr hübsch aber funktioniert halt auch,
    	{								       //besser die Zuweisung vorher machen u. dann pruefen	
    		cout<<"\nFehler bei der Eingabe !"<<endl;
    		bnochmal = true;//es ist keine Zahl
    		}
    	else
    	{
    		if( itmp > izufallszahl)
    			{
    			cout<<"\nIhre Zahl ist zu gross !"<<endl;
    			bnochmal = true;
    			}
    
    		else if( itmp < izufallszahl )
    			{
    			cout<<"\nIhre Zahl ist zu klein !"<<endl;
    			bnochmal = true;
    			}
    
    		else if ( itmp == izufallszahl )//if(...) könnte man auch weglassen, so ist aber besser zu lesen
    			{
    			cout<<"\n\t"<< izahl <<"\tIst die richtige Zahl"<<endl;
    
    			cout<<"\nNoch ein Spiel ?\nja[1] | nein[0]: ";
    			cin>>itmp;//verwende ich wieder um Variable zu sparen
    
    			itmp == 1 ? bnochmal = true : bnochmal = false;
    			}
    	}
    
    }
    while( bnochmal );
    
    return 0;
    }
    
    int get_number( char * izahl_tmp)
    {
    	int ilen		  = 0;
    	int iergebnis	  = 0;
    	int ifaktor		  = 1;
    
    	ilen = strlen(izahl_tmp);//Laenge unseres String ermitteln, benoetigt "string.h"
    	int *itmp_array = new int [ilen];//neues temporaeres Array anlegen, mit der Laenge unseres Strings
    
    //Hier wird jetzt jedes Element im String mit seinem Ascii-Wert verglichen,
    //wenn eins gefunden wurde, dann die enstprechende Zahl in das Array eintragen
    	for (int i = 0; i < ilen; i++)
    		{
    			switch( (izahl_tmp[i]) )
    			{
    			case 48:itmp_array[i] = 0;break;
    			case 49:itmp_array[i] = 1;break;
    			case 50:itmp_array[i] = 2;break;
    			case 51:itmp_array[i] = 3;break;
    			case 52:itmp_array[i] = 4;break;
    			case 53:itmp_array[i] = 5;break;
    			case 54:itmp_array[i] = 6;break;
    			case 55:itmp_array[i] = 7;break;
    			case 56:itmp_array[i] = 8;break;
    			case 57:itmp_array[i] = 9;break;
    
    			default: return false;
    			}
    		}
    
    //Die einzelnen Werte aufaddieren
    //muss man nich von unbedingt von hinter her machen, geht aber einfacher
    	for(int j = ilen-1; j >= 0 ; j--)
    		{
    		iergebnis += itmp_array[j] * ifaktor;
    		ifaktor   *= 10;
    		}
    
    	delete []itmp_array;//meinen allokierten Speicher wieder freigeben (sehr wichtig !)
    
    return iergebnis;//das Ergebnis der vorangegangenen Berechnung (also unsere Zahl) zurückgeben
    }
    

    Ich hoffe du kannst mit Code wenigstens ein bisschen was anfangen.
    Die Sache ist denke ich auch kürzer machbar, für das herausfiltern von Buschaben etc. gibts glaubig schon Funktionen. Musst halt mal gucken.

    Wenn noch Fragen sein sollten, mail, ICQ.


Anmelden zum Antworten