Aller Anfang ist schwer



  • Ja, das geht auch bei mir, nur 'M' oder so, aber was ist wenn jetzt zwei Wörter sind, die mit M beginnen??



  • PapaNoah schrieb:

    ~fricky schrieb:

    ^^mit strings geht das auch nicht. ein case-label muss ein fester int-wert sein, wie etwa eine zahl, ein #define, das zu 'ner zahl expandiert wird oder ein enum-wert. z.b. geht's mit variablen auch nicht.
    🙂

    Man kann aber nach einzelnen Zeichen abfragen, zB. 'a' oder so, das funktioniert bei mir ohne Probleme!

    mfg

    ja, weil zeichen intern ganze zahlen sind.



  • Irgendwie wenn ich schreibe :
    case Michael, gehts bei mir nicht
    da steht immer undeclared!
    aber deklarieren kann ichs doch nicht, weil ichs ja erst einlese, oder?



  • Dir wurde bereits gesagt dass case-Marken nur Integer-Zahlen sein können.

    case Michael geht demzufolge natürlich nur wenn Michael durch eine Integer-zahl ersetzt wird (durch #define Michael 1).

    Damit wird natürlich nicht der String "Michael" verglichen, sondern das Zeichen, welches sich hinter dem ASCII-Code 1 verbirgt.

    BTW: Case liest nichts ein, switch-case fragt etwas ab. Einlesen tun fgets oder scanf etc.



  • int main( int arg, char* argv[] )
    {
        int g;
        fp = fopen ("C:\\Namensverzeichnis.txt", "r");
    
        while ( g != EOF )
        {
            g = fgetc (fp);
            switch (g)
            {
                case 'Michael':
                    ...
                break;
    
                case 'Alex':
                    ...
                break;
            }
    
        }
    

    so will ich einfach aus ner Textdatei, das kann ich schon, etwas auslesen, aber es geht dann irgendwie nicht!



  • hier hast n konkretes beispiel, was man so machen kann:

    #define MICHAEL 0
    #define THORSTEN 1
    
    char* names[] = {"Michael", "Thorsten" };
    
    int main()
    {
    	int c;
    	scanf("%d", &c);
    
    	switch (c)
    	{
    		case MICHAEL:
    			puts ( names[MICHAEL] );
    		break;
    
    		case THORSTEN:
    			puts ( names[THORSTEN] );
    		break;
    
    		default:
    			puts ( "Kenn ich nicht, zeig ich nicht!" );
    	}
    
    	return 0;
    }
    

    scanf zu benutzen ist generell nicht empfehlenswert, hatte aber keinen bock da jetzt son hermann von zu machen.



  • switch n00b schrieb:

    scanf zu benutzen ist generell nicht empfehlenswert, hatte aber keinen bock da jetzt son hermann von zu machen.

    an der eingabeaufforderung ja, bei dateien kann man es ruhig nehmen, wenn das format verlässlich ist du n00b.



  • #define Michael 0

    int main( int arg, char* argv[] )
    {
        char* names[] = {"Michael", "Thorsten" };
        int g;
        fp = fopen ("C:\\Namensverzeichnis.txt", "r");
    
        while ( g != EOF )
        {
            g = fgetc (fp);
            switch (g)
            {
                case Michael:
                    puts ( names[MICHAEL] );
                    printf("blabla");
                break;
    
            }
    
        }
    

    Nur es passiert nix!
    Also es gibt keine Fehlermeldung, aber sonst passiert nix andres zu vorher!



  • ^^so wie's aussieht, müssen in der datei die int-werte 0 und 1 stecken, damit sich was tut. wenn die namen, als strings, in der datei sind, dann kommste mit switch/case nicht weiter, eher mit strcmp/stricmp etc.
    🙂



  • Haha!
    Erledigt, war ein Fehler von mir!
    Danke Leute!
    das mit define war echt ne tolle Idee!


Anmelden zum Antworten