void checkalnum(void) { j=0; if(isdigit(token.charvalue[j])){ checknumber(); } else { checkkeyword(); } }
static int CvBGPixelStat_nPbcc(lua_State *L) { const char f_msg[]=CVBGPIXELSTAT_NAME".Pbcc=num"; checkCvBGPixelStat(L,1)->Pbcc=(float)checknumber(L,3); return 0; }
/* hier wird der Rundenablauf gesteuert */ int runde(int sd) { int rc, err; int erg[3]; int rundenende; char buffer[MAXLEN]; rundenende = 0; printf("Errate die Geheimzahl von %s!\n", opponentplayer); printf("Gib deinen Versuch ein (4 unterschiedliche Ziffern): "); while(1) { fd_set bereit; FD_ZERO(&bereit); FD_SET( 0, &bereit); FD_SET(sd, &bereit); /* Eingabe vom Nutzer oder Nachricht vom Server abwarten */ rc = select(MAX( 0, sd) + 1 , &bereit, NULL, NULL, NULL); if (rc < 0) { if (errno == EINTR) continue; perror("select"); ende(SIGTERM); } if (rc == 0) continue; /* Es kommt eine Nachricht vom Server */ if (FD_ISSET(sd, &bereit)) { if (empfangen( sd, buffer, MAXLEN) <= 0) { /* Server ist nicht mehr erreichbar - Ende der Kommunikation */ perror("empfangen"); ende(-1); } /* es kommt quit */ if (strcasecmp(buffer, "quit\n") == 0) { perror("Der Server ist nicht mehr erreichbar!"); ende(SIGTERM); } /* überprüfen ob Gewonnen/Verloren/Remis */ if (strcasecmp(buffer, "gewonnen\n") == 0) { printf("\n\nYuppieh - Du hast gewonnen!\n"); printf("===========\n"); ok(sd); } if (strcasecmp(buffer, "verloren\n") == 0) { printf("\n\nSchade - Du hast verloren...\n"); printf("===========\n"); ok(sd); } if (strcasecmp(buffer, "remis\n") == 0) { printf("\n\nUnentschieden - Beide haben es gleichzeitig geschafft!\n"); printf("===========\n"); ok(sd); } if (strncasecmp(buffer, "versuch:", 8) == 0) { //printf("vom Server: \"%s\"\n",buffer); rc = sscanf(buffer, "%*s %d", &erg[0]); if(rc != 1) { perror("versuch empfangen"); ende(-1); } printf("\t%s hat geraten: %04d ", opponentplayer, erg[0]); printf("(Deine Geheimzahl lautet: %s)\n", secret); /* mit "OK" bestaetigen */ ok(sd); } if (strncasecmp(buffer, "ergebnis:", 9) == 0) { //printf("vom Server: \"%s\"\n",buffer); rc = sscanf(buffer, "%*s %d %d %d", &erg[0], &erg[1], &erg[2]); if(rc != 3) { perror("ergebnis"); ende(-1); } printf("\tDein Versuch %04d ergab (richtig: Anzahl / Stelle): %d / %d\n", erg[0], erg[1], erg[2]); /* mit "OK" bestaetigen */ ok(sd); printf("\nGib deinen neuen Versuch ein (4 unterschiedliche Ziffern): "); } if (strcasecmp(buffer, "noch einmal?\n") == 0) { printf("Willst du noch einmal spielen (j/n)? "); rundenende = 1; /* mit "OK" bestaetigen */ ok(sd); } continue; } if (FD_ISSET(0, &bereit)) { rc = readline(0, buffer, MAXLEN); if (rc < 0) { /* Fehler -> Ausgabe */ perror("readline"); ende(-1); } if (rc > 5){ printf("Gib deinen Versuch ein (4 unterschiedliche Ziffern): "); continue; } *(buffer+rc) = '\0'; if(rundenende) { if (strncasecmp(buffer, "j\n", 2) == 0) { /* String senden */ if(senden(sd, "bereit\n") < 0) { perror("senden"); ende(-1); } waitforserverreply(sd,1,buffer); /* gebe 1 zurück um eine weitere Runde zu starten */ return 1; } if (strncasecmp(buffer, "n\n", 2) == 0) { /* gebe 0 zurück um keine weitere Runde zu starten */ return 0; } else { printf("Falsche Eingabe, erwarte (j/n)\n"); continue; } } err = checknumber(buffer); if(err == 1) { printf("Gib deinen Versuch ein (4 unterschiedliche Ziffern): "); err = 0; continue; } else { /* Geheimzahl senden */ str_senden(sd, "ZAHL: ", buffer, 5); waitforserverreply(sd,1, buffer); if (strcasecmp(buffer, "ok\n") != 0) { perror("client: not ok"); ende(-1); } } } } }
/*------------------------------------------------------------------------------------*/ void mastermind(int sd) /* Die Spiel-Funktion */ { int rc; int err; int gamerounds; char buffer[MAXLEN]; /*char tmp[MAXLEN];*/ /* stdout ungepuffert, damit write(1,..) und printf() genutzt werden können */ setbuf(stdout, NULL); /* Warten auf den Start der Kommunikation */ waitforserverreply(sd,0, buffer); /* Auf Fehler überprüfen */ if (strcasecmp(buffer, "HALLO\n") != 0) { perror("No Hallo"); ende(-1); } /* Hallo mit ok bestätigen */ ok(sd); printf("Gib deinen Spielernamen ein!\n"); printf("Dein Spielername: "); while(1) { fd_set bereit; FD_ZERO(&bereit); FD_SET( 0, &bereit); FD_SET(sd, &bereit); rc = select(MAX( 0, sd) + 1 , &bereit, NULL, NULL, NULL); if (rc < 0) { if (errno == EINTR) continue; perror("select"); ende(SIGTERM); } if (rc == 0) continue; /* Es kam eine Nachricht vom Server */ if (FD_ISSET(sd, &bereit)) { /* Erst einmal empfangen (kann auch EOF sein!) */ if (empfangen( sd, buffer, MAXLEN) <= 0) { /* Server ist nicht mehr erreichbar - Ende der Kommunikation */ perror("empfangen"); ende(-1); } continue; } /* Der Spieler hat etwas eingegeben und mit '\n' bestätigt */ if (FD_ISSET(0, &bereit)) { /* von Eingabe lesen */ rc = readline(0, buffer, MAXLEN-1); /* Fehler -> Ausgabe */ if (rc < 0) { perror("readline"); ende(-1); } /* String erstellen */ *(buffer+rc) = (char) 0; /* Prüfen ob gültiger Name eingegeben wurde */ /* Prüfen auf Länge */ if (strlen(buffer) == 1) { printf("Bitte einen gültigen Spielernamen angeben: "); continue; } /* Spielernamen sichern */ strcpy(playername, buffer); /* Namen senden */ str_senden(sd, "NAME: ", playername, rc); /* die Einleseschleife beenden */ break; } }/*-----Ende Spielernamen-Einlese-Schleife-----*/ /* Warten auf "OK" vom Server */ waitforserverreply(sd,0, buffer); /* Überprüfen ob wirklich "OK" empfangen wurde */ if (strcasecmp(buffer, "ok\n") != 0) { perror("not OK"); ende(-1); } /* Warten auf Gegenspielername */ waitforserverreply(sd,0, buffer); /* Auf Fehler überprüfen */ if (strncasecmp(buffer, "name:", 5) != 0) { perror("not name"); ende(-1); } /* mit "OK" bestätigen */ ok(sd); /* Sichern des Gegenspielernamens */ strcpy(opponentplayer, &buffer[6]); opponentplayer[strlen(opponentplayer) - 1] = '\0'; /* Namen des Gegenspielers ausgeben */ printf("Dein Gegenspieler nennt sich: %s.", opponentplayer); /* Warten auf Anzahl der Runden */ waitforserverreply(sd,0, buffer); /* Auf Fehler überprüfen */ if (strncasecmp(buffer, "runden:", 5) != 0) { perror("not rounds"); ende(-1); } /* mit "OK" bestaetigen */ ok(sd); /* Speichern der Rundenzahl */ if( sscanf(buffer, "%*s %d", &gamerounds) < 1) { perror("not rounds"); ende(-1); } /* dem Spieler die Rundenanzahl mitteilen */ printf("Es sind maximal %d Runden vereinbart.\n\n", gamerounds); /* Geheimzahl einlesen */ while(1) { printf("Gib deine Geheimzahl ein (4 unterschiedliche Ziffern): "); while(1) { /* Variable um einen Fehler zu behandeln */ fd_set bereit; FD_ZERO(&bereit); FD_SET( 0, &bereit); FD_SET(sd, &bereit); rc = select(MAX( 0, sd) + 1 , &bereit, NULL, NULL, NULL); if (rc < 0) { if (errno == EINTR) continue; perror("select"); ende(SIGTERM); } if (rc == 0) continue; if (FD_ISSET(sd, &bereit)) { /* Erst einmal empfangen (kann auch EOF sein!) */ if (empfangen( sd, buffer, MAXLEN) <= 0) { /* Server ist nicht mehr erreichbar - Ende der Kommunikation */ perror("empfangen"); ende(-1); } continue; } if (FD_ISSET(0, &bereit)) { rc = readline(0, secret, MAXLEN); if (rc < 0) { /* Fehler -> Ausgabe */ perror("readline"); ende(SIGTERM); } *(secret+rc) = (char) 0; /* String erstellen */ err = checknumber(secret); if(err == 1) { printf("Gib deine Geheimzahl ein (4 unterschiedliche Ziffern): "); err = 0; continue; } if (strcasecmp(secret, "exit\n") == 0) continue; if (strcasecmp(secret, "quit\n") == 0) continue; if (strcasecmp(secret, "ok\n") == 0) continue; if (strcasecmp(secret, "\n") == 0) continue; if (strcasecmp(secret, "\0") == 0) continue; /* Geheimzahl senden */ str_senden(sd, "GEHEIMZAHL: ", secret, rc); break; } } waitforserverreply(sd,1, buffer); if (strcasecmp(buffer, "ok\n") != 0) { perror("not ok"); ende(-1); } waitforserverreply(sd,0,buffer); if (strcasecmp(buffer, "start\n") != 0) { perror("not start"); ende(-1); } /* mit "OK" bestaetigen */ ok(sd); printf("Es kann los gehen!\n"); printf("==================\n\n"); if(!runde(sd)) break; } return; }
/* hier wird der Rundenablauf gesteuert */ int runde(int sd) { int rc, err; /* Returncodes/Fehler */ int erg[3]; /* Ergebnis des Ratens, z.B.: {1234,3,1} */ int rundenende; /* Wenn 1 wird Abfrage für neue Runde aufgerufen */ char buffer[MAXLEN]; rundenende = 0; printf("Errate die Geheimzahl von %s!\n", opponentplayer); printf("Gib deinen Versuch ein (4 unterschiedliche Ziffern): "); while(1) { fd_set bereit; FD_ZERO(&bereit); FD_SET(0, &bereit); FD_SET(sd, &bereit); /* Eingabe vom Nutzer oder Nachricht vom Server abwarten */ rc = select(MAX(0, sd) + 1, &bereit, NULL, NULL, NULL); if (rc < 0) { if (errno == EINTR) continue; perror("select"); ende(SIGTERM); } if (rc == 0) continue; if (FD_ISSET(sd, &bereit)) { if (empfangen(sd, buffer, MAXLEN) <= 0) { perror("empfangen"); ende(-1); } /* es kommt quit */ if (strcasecmp(buffer, "quit\n") == 0) { perror("Der Server ist nicht mehr erreichbar!"); ende(-1); } /* überprüfen ob Gewonnen/Verloren/Remis */ if (strcasecmp(buffer, "gewonnen\n") == 0) { printf("\n\nYuppieh - Du hast gewonnen!\n"); printf("=========== \n"); /* mit OK bestätigen */ ok(sd); } if (strcasecmp(buffer, "verloren\n") == 0) { printf("\n\nSchade - Du hast verloren...\n"); printf("=========== \n"); /* mit OK bestätigen */ ok(sd); } if (strcasecmp(buffer, "remis\n") == 0) { printf("\n\nUnentschieden - Beide haben es gleichzeitig geschafft!\n"); printf("=========== \n"); /* mit OK bestätigen */ ok(sd); } /* Gegenspielerversuch empfangen -> Ausgabe */ if (strncasecmp(buffer, "versuch:", 8) == 0) { /* Gegenspielerversuch auslesen */ rc = sscanf(buffer, "%*s %d", &erg[0]); if (rc != 1) { perror("versuch empfangen"); ende(-1); } /* Ausgabe des Versuchs */ printf("\t%s hat geraten: %04d ", opponentplayer, erg[0]); printf("(Deine Geheimzahl lautet: %s)\n", secret); /* mit "OK" bestaetigen */ ok(sd); } /* Das Ergebnis des eigenen Versuchs empfangen */ if (strncasecmp(buffer, "ergebnis:", 9) == 0) { /* Zahlen auslesen */ rc = sscanf(buffer, "%*s %d %d %d", &erg[0], &erg[1], &erg[2]); if (rc != 3) { perror("ergebnis"); ende(-1); } /* Ausgabe des Ergebnis vom Server */ printf("\tDein Versuch %04d ergab (richtig: Anzahl / Stelle): %d / %d\n", erg[0], erg[1], erg[2]); /* mit "OK" bestaetigen */ ok(sd); printf("\nGib deinen neuen Versuch ein (4 unterschiedliche Ziffern): "); } /* Abfrage für neue Runde empfangen */ if (strcasecmp(buffer, "noch einmal?\n") == 0) { printf("Willst du noch einmal spielen (j/n)? "); /* eine Runde hat ein Ergebnis */ rundenende = 1; /* mit "OK" bestaetigen */ ok(sd); } continue; } /* stdin ist bereit */ if (FD_ISSET(0, &bereit)) { rc = readline(0, buffer, MAXLEN); if (rc < 0) { perror("readline"); ende(-1); } if (rc > 5){ printf("Gib deinen Versuch ein (4 unterschiedliche Ziffern): "); continue; } *(buffer+rc) = '\0'; /* bei Rundenende wird (j/n) als Eingabe erwartet */ if (rundenende) { if (strncasecmp(buffer, "j\n", 2) == 0) { /* String senden */ if (senden(sd, "bereit\n") < 0) { perror("senden"); ende(-1); } /* Auf anderen Spieler warten */ waitforserverreply(sd, 1, buffer); printf("\n======> Eine neue Runde beginnt <======\n\n"); /* gebe 1 zurück um eine weitere Runde zu starten */ return 1; } if (strncasecmp(buffer, "n\n", 2) == 0) { /* gebe 0 zurück um keine weitere Runde zu starten */ return 0; } else { printf("Falsche Eingabe, erwarte (j/n)\n"); continue; } } /* eingelesene Zahl auf Richtigkeit */ err = checknumber(buffer); if (err == 1) { /* Bei Fehler neu einlesen */ printf("Gib deinen Versuch ein (4 unterschiedliche Ziffern): "); err = 0; continue; } /* Bei korrekter Zahl -> an den Server senden */ else { /* Geheimzahl senden */ str_senden(sd, "ZAHL: ", buffer, 5); /* Antwort abwarten */ waitforserverreply(sd, 1, buffer); if (strcasecmp(buffer, "ok\n") != 0) { perror("ok"); ende(-1); } } } } /* Zahl-einlesen-Schleife */ } /* Raterunde - Ende */
void mastermind(int sd) /* Die Spiel-Funktion */ { int rc; int err; int gamerounds; char buffer[MAXLEN]; /*char tmp[MAXLEN];*/ /* stdout ungepuffert, damit write(1, ..) und printf() genutzt werden können */ setbuf(stdout, NULL); /* Warten auf den Start der Kommunikation */ waitforserverreply(sd, 0, buffer); /* Auf Fehler überprüfen */ if (strcasecmp(buffer, "HALLO\n") != 0) { perror("Hallo"); ende(-1); } /* Hallo mit ok bestätigen */ ok(sd); /* Spielernamen einlesen beginnt: */ printf("Gib deinen Spielernamen ein!\n"); printf("Dein Spielername: "); while(1) { fd_set bereit; FD_ZERO(&bereit); FD_SET(0, &bereit); FD_SET(sd, &bereit); /* Prüfen ob Socket oder stdin bereit sind */ rc = select(MAX(0, sd) + 1, &bereit, NULL, NULL, NULL); /* Auf Fehler überprüfen */ if (rc < 0) { if (errno == EINTR) continue; perror("select"); ende(-1); } /* While-Schleife fortsetzen falls nicht bereit war */ if (rc == 0) continue; /* Es kam eine Nachricht vom Server (Socket) */ if (FD_ISSET(sd, &bereit)) { /* empfangen (kann auch EOF sein!) */ if (empfangen(sd, buffer, MAXLEN) <= 0) { /* Server ist nicht mehr erreichbar - Ende */ perror("empfangen"); ende(-1); } continue; } /* Der Spieler hat etwas eingegeben und mit '\n' bestätigt */ if (FD_ISSET(0, &bereit)) { /* von Eingabe lesen */ rc = readline(0, buffer, MAXLEN-1); /* Fehler -> Ende */ if (rc < 0) { perror("readline"); ende(-1); } /* String erstellen */ *(buffer+rc) = '\0'; /* Prüfen ob gültiger Name eingegeben wurde */ /* Prüfen auf Länge */ if (strlen(buffer) == 1) { printf("Bitte einen gültigen Spielernamen angeben: "); /* Nochmal einlesen */ continue; } /* Spielernamen sichern */ strcpy(playername, buffer); /* Namen senden */ str_senden(sd, "NAME: ", playername, rc); /* die Einleseschleife beenden */ break; } }/*-----Ende Spielernamen-Einlese-Schleife-----*/ /* Warten auf "OK" vom Server */ waitforserverreply(sd, 0, buffer); /* Überprüfen ob wirklich "OK" empfangen wurde */ if (strcasecmp(buffer, "ok\n") != 0) { perror("OK"); ende(-1); } /* Warten auf Gegenspielername */ waitforserverreply(sd, 0, buffer); /* Auf Fehler überprüfen */ if (strncasecmp(buffer, "name: ", 6) != 0) { perror("name"); ende(-1); } /* mit "OK" bestätigen */ ok(sd); /* Sichern des Gegenspielernamens */ strcpy(opponentplayer, &buffer[6]); /* Newline vom Namen entfernen */ opponentplayer[strlen(opponentplayer) - 1] = '\0'; /* Namen des Gegenspielers ausgeben */ printf("Dein Gegenspieler nennt sich: %s.", opponentplayer); /* Warten auf Anzahl der Runden */ waitforserverreply(sd, 0, buffer); /* Auf Fehler überprüfen */ if (strncasecmp(buffer, "runden: ", 6) != 0) { perror("Runden"); ende(-1); } /* mit "OK" bestaetigen */ ok(sd); /* Speichern der Rundenzahl */ if (sscanf(buffer, "%*s %d", &gamerounds) < 1) { perror("not rounds"); ende(-1); } /* dem Spieler die Rundenanzahl mitteilen */ printf("Es sind maximal %d Runden vereinbart.\n\n", gamerounds); /* Runden beginnt */ while(1) { /* Geheimzahl einlesen */ printf("Gib deine Geheimzahl ein (4 unterschiedliche Ziffern): "); while(1) { fd_set bereit; FD_ZERO(&bereit); FD_SET(0, &bereit); FD_SET(sd, &bereit); rc = select(MAX(0, sd) + 1, &bereit, NULL, NULL, NULL); if (rc < 0) { if (errno == EINTR) continue; perror("select"); ende(-1); } if (rc == 0) continue; if (FD_ISSET(sd, &bereit)) { if (empfangen(sd, buffer, MAXLEN) <= 0) { perror("empfangen"); ende(-1); } continue; } if (FD_ISSET(0, &bereit)) { rc = readline(0, secret, MAXLEN); if (rc < 0) { perror("readline"); ende(-1); } *(secret+rc) = '\0'; /* Eingelesenen String auf korrekte Zahl prüfem */ err = checknumber(secret); if (err == 1) { printf("Gib deine Geheimzahl ein (4 unterschiedliche Ziffern): "); err = 0; /* Bei Fehler neu einlesen */ continue; } /* Geheimzahl senden */ str_senden(sd, "GEHEIMZAHL: ", secret, rc); /* Einles Schleife beenden */ break; } } /* Geheimzahl-Einlesen-Schleife Ende */ waitforserverreply(sd, 1, buffer); if (strcasecmp(buffer, "ok\n") != 0) { perror("ok"); ende(-1); } /* Warte auf Nachricht um Raterunde zu starten */ waitforserverreply(sd, 0, buffer); if (strcasecmp(buffer, "start\n") != 0) { perror("start"); ende(-1); } /* "Start" mit "OK" bestaetigen */ ok(sd); printf("Es kann los gehen!\n"); printf("==================\n\n"); /* Raterunde beginnt */ if (!runde(sd)) break; } /* Spiel wird beendet wenn runde nicht 1 zurückgibt */ /* Mastermindfunktion Ende -> zurück zur Main-Funktion -> Programmende */ return; }
static int CvPoint3D64f_nz(lua_State *L) { const char f_msg[]=CVPOINT3D64F_NAME".z=num"; checkCvPoint3D64f(L,1)->z=(float)checknumber(L,3); return 0; }
int main(){ int i; int play; int anser[4]; char input[6]; int hit = 0, blow = 0; do{ srand ((unsigned) time (NULL)); printf("\n------------- Hit and Blow -------------\n\n"); make4number(&anser[0]); for(play = 0 ; play < 10 ; ++play){ int Flag = 0; printf("%d", play + 1); switch(play){ case 0: printf("st "); break; case 1: case 2: printf("nd "); break; default: printf("th "); } printf("try.\n"); do{ printf("Number:"); input_str(&input[0], sizeof(input)); if(0 == checknumber(input)){ Flag = 1; }else if (1 == checknumber(input)){ printf("Error : number of digits is not correct.\n"); }else if(2 == checknumber(input)){ printf("Error: contains non-numeric.\n"); }else if (3 == checknumber(input)){ printf("Error: contains the same number.\n"); } }while (Flag == 0); judgeHB(anser, input, &hit, &blow); if(4 == hit){ printf("congratulations!\nIt is a success in the %d", play); switch(play){ case 1: printf("st."); break; case 2: case 3: printf("nd."); break; default: printf("th."); } break; }else{ printHB(hit, blow); } hit = 0; blow = 0; } if (play == 10){ printf("That's too bad.\n"); for(i = 0 ; i < 4 ; ++i){ printf("%d", anser[i]); } } puts (""); }while(0 ==Retry()); return 0; }
static int CvMoments_nm30(lua_State *L) { const char f_msg[]=CVMOMENTS_NAME".m30=num"; checkCvMoments(L,1)->m30=checknumber(L,3); return 0; }
static int CvMoments_ninv_sqrt_m00(lua_State *L) { const char f_msg[]=CVMOMENTS_NAME".inv_sqrt_m00=num"; checkCvMoments(L,1)->inv_sqrt_m00=checknumber(L,3); return 0; }
static int CvSURFPoint_nhessian(lua_State *L) { const char f_msg[]=CVSURFPOINT_NAME".hessian=num"; checkCvSURFPoint(L,1)->hessian=(float)checknumber(L,3); return 0; }
static int CvSURFPoint_ndir(lua_State *L) { const char f_msg[]=CVSURFPOINT_NAME".dir=num"; checkCvSURFPoint(L,1)->dir=(float)checknumber(L,3); return 0; }