suche "empty() funktion" [php] für c++



  • //Edit mist geschrieben



  • Dani1987 schrieb:

    hehe habs so gelöst:

    // [...]
    	while(firstperson == (char)"");
    

    Das ist ein flacher Vergleich (es werden nur die Adressen verglichen), das wid hier nicht so funktioniert wie du dir das denkst. Du brauchst einen tiefen Vergleich. Also du musst den Inhalt vergleichen, z.B. so:

    while(firstperson[0] == '\0');
    

    die Probleme hättest du in C++, wie oben gezeigt, nicht.

    [edit] ups, da fällt mir nochwas auf, also du willst nur ein Zeichen und 'firstperson' ist vom Typ char? (Dachte es wäre ein char-Array) dann sieht deine Bedingung z.B. so aus:

    while(firstperson == '\0');
    

    Dein Vergleich oben ist so auch ziemlich schwachsinnig, zumal der Typecast gar nicht funktionieren dürfte, ein char-Array ist nun mal kein Zeichen bzw. ein Zeiger darauf ist kein Zeichen.

    Also um so länger ich mir durchlese/angucke, was du geschrieben hast, um so weniger kapier ich es, was willst du denn überhaupt machen? Soll die Schleife so lange laufen, bis der Spieler einen Namen für seine Spielfigur eingegeben hat???

    (vlt. könnte diesen Thread noch ein freundlicher Moderator ins C-Forum verschieben)



  • ich will einfach dir do while schleife nochmal durchlaufen lassen wenn nichts eingegeben wurde!

    aber wieso erkennt er das scanf nicht? der überspringt das einfach



  • int main()
    {
            char str; // "str"
            do
            {
                    printf("\n Bitte Namen eingeben: ");
                    scanf("%c", &str);
    
            }while(str == '\n');
    
            printf("\n Name: _%c_", str);
    
            return 0;
    }
    

    //Edit
    @Daniel Schuhman:

    while(firstperson == '\0');

    Das funktioniert?

    Caipi



  • Dein scanf liest genau ein Zeichen ein und es wartet auch solange, bis eins eingegeben wurde, man kann also nicht kein Zeichen eingeben, man kann höchstens eins eingeben, was du nicht als zulässige Eingabe akzeptierst.

    @Caipi: dich mein ich damit natürlich nicht.

    Caipi schrieb:

    [cpp]

    while(firstperson == '\0');

    Das funktioniert?

    Caipi

    kommt drauf an was es machen soll ;), wenn '\0' die einzige ungültige Eingabe ist, funktioierts wahrscheinlich



  • int main()
    {
            char str; // "str"
            do
            {
                    printf("\n Bitte Namen eingeben: ");
                    fflush(stdin);
                    scanf("%c", &str);
    
            }while(str == '\n');
    
            printf("\n Name: _%c_", str);
    
            return 0;
    }
    

    versuch mal so



  • ich glaube ihr versteht alle mein problem nicht:

    er ÜBERSPRINGT das scanf, es kommt gar nicht erst soweit das ich was eingeben kann!



  • haste meine Version mit dem fflush(stdin) dawischen versucht?



  • probiert es einfach selber aus, es klappt net:

    #include "stdafx.h"
    
    int main(int argc, char* argv[])
    {
    
    	int modus, error = 0;
    	char firstperson, secondperson;
    
    	printf("*********************************\n");
    	printf("\xB2 B\x94se 13 * Das Spiel           \xB2\n\xB2 Copyright 2005 by Daniel **** \xB2");
    	printf("\n*********************************\n\n\n");
    
    	printf("Bitte w\x84hlen Sie den Spieler-Modus: \n\n");
    	printf("Einzellspieler Modus: [1]\nMultiplayer Modus:    [2]");
    
    	do
    	{
    
    		if(error == 1)
    		{
    			printf("\n\nDieser Spieler-Modus existiert nicht, bitte w\x84hlen Sie [1] oder [2]!");
    		}
    
    		printf("\n\nIhre Wahl: ");
    
    		scanf("%d", &modus);
    
    		error = 1;
    
    	}
    	while(modus > 2);
    
    	switch(modus)
    	{
    		case 1:
    
    			// Kommt noch!
    
    		break;
    
    		case 2:
    
    			error = 0;
    			do
    			{
    
    				if(error == 1)
    				{
    					printf("\n\nDieser Spieler-Modus existiert nicht, bitte w\x84hlen Sie [1] oder [2]!");
    				}
    
    				printf("\n\nSie haben sich f\x81r den Multiplayer Modus entschieden!\n\nBitte geben Sie den Namen der ersten Person an: ");
    				scanf("%c", &firstperson);
    
    			error = 1;
    
    			}
    			while(error == 1);
    
    			//printf("\n\nBitte geben Sie nun den Namen der zweiten Person an: ");
    			//		scanf("%c", &secondperson);
    
    		break;
    
    		default:
    			printf("\n\nDieser Spieler-Modus existiert nicht!");
    		break;
    	}
    
    	printf("\n\n\n\n");
    
    	return 0;
    }
    


  • Das Problem ist, wie bereits gesagt wurde, der Inputbuffer. Du liest eine Zahl ein und der Nutzer bestätigt dies mit Enter. scanf erhält die Eingabe, der Zeilenvorschub, der durch Druck von Enter ausgelöst wurde befindet sich aber noch im Inputbuffer. Beim zweiten Aufruf von scanf wird nicht mehr gewartet sondern einfach der Zeilenvorschub aus dem Inputbuffer als Eingabe genommen. Eine Lösung dafür wäre das Leeren des Eingabebuffers. Dies funktioniert zwar in manchen Fällen mit fflush(stdin); ist aber nicht standardkonform, einen Inputbuffer "nirgendwohin" zu flushen.

    EDIT: Dein jetziger Code enthält übrigens eine Endlosschleife 😉


Anmelden zum Antworten