Hilfe zu Pionter.



  • Ich muss für die Schule ein Programm schreiben aber mir wird im Quellcode immer ein Fehler angezeit.
    Vielleicht könnt ihr mir ja mal weiter helfen.

    #include <stdio.h>

    unsigned int funktion(unsigned int *h, unsigned int *m, unsigned int *s){
    do{
    printf("Bitte Uhrzeit im Format hh🇲🇲ss einlesen.");
    fflush(stdout);
    fflush(stdin);
    scanf("%u:%u:%u", h, m, s);
    }while((h > 24 || m > 59 || s > 59 || h == 24) && (m > 0 || s > 0));
    } // bei der Schleife bekomme ich immer die Fehlermeldeun :
    comparison between pointer and integer

    int main(void){

    unsigned int h, m, s;

    funktion(&h,&m,&s);

    printf("Die Uhrzeit wurde richtig eingelesen.");

    return 0;
    }



  • july48 schrieb:

    Ich muss für die Schule ein Programm schreiben aber mir wird im Quellcode immer ein Fehler angezeit.
    Vielleicht könnt ihr mir ja mal weiter helfen.

    #include <stdio.h>
    
    unsigned int funktion(unsigned int *h, unsigned int *m, unsigned int *s){
    	do{
    		printf("Bitte Uhrzeit im Format hh:mm:ss einlesen.");
    		fflush(stdout);
    		fflush(stdin);
    		scanf("%u:%u:%u", h, m, s);
    	}while((h > 24 || m > 59 || s > 59 || h == 24) && (m > 0 || s > 0));
    }          // bei der Schleife bekomme ich immer die Fehlermeldeun :
                  comparison between pointer and integer
    
    int main(void){
    
    	unsigned int h, m, s;
    
    	funktion(&h,&m,&s);
    
    		printf("Die Uhrzeit wurde richtig eingelesen.");
    
    	return 0;
    }
    

    Bitte C++ Tags verwenden.



  • Da h, m und s Pointer sind musst du sie erst dereferenzieren, um den Wert zu erhalten. Das geht mit dem * Operator.

    z.B.: while (*h > 24....

    fflush(stdin) ist undefiniert!



  • Evtl. irgendwie so:

    #include <stdio.h>
    
    void funktion(unsigned int *h, unsigned int *m, unsigned int *s) {
    	int rc;
    
        do {
            printf("Bitte Uhrzeit im Format hh:mm:ss eingeben: ");
    
            fflush(stdout);
    
    		rc = scanf("%u:%u:%u", h, m, s);
    
    		while (getchar() != '\n');
    
    		if (rc != 3)
    		{
    			continue;
    		}
    	} while ((*h >= 24 || *m > 59 || *s > 59 || *m < 0 || *s < 0));
    }
    
    int main(void) {
        unsigned int h, m, s;
    
        funktion(&h,&m,&s);
    
    	printf("Die Uhrzeit wurde richtig eingelesen: %u:%u:%u\n", h, m, s);
    
        return 0;
    }
    


  • ghjghj schrieb:

    Evtl. irgendwie so:

    } while ((*h >= 24 || *m > 59 || *s > 59 || *m < 0 || *s < 0));
    

    Es macht keinen Sinn, Minute und Sekunde auf < 0 zu prüfen (unsigned).
    Vermutlich war beabsichtigt, auch 24:00:00 als gültige Uhrzeit zuzulassen,
    dann müßte es etwa so aussehen:

    } while (*h > 24 || *m > 59 || *s > 59 || *h == 24 && (*m > 0 || *s > 0));
    

    [/quote]



  • abgesehen davon, dass man wenn es um uhrzeiten etc.
    geht doch gut die <time.h> verwenden kann - wenn erlaubt^^.


Log in to reply