2009-07-15 5 views
1
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

void initDeck (int deck[]); 
void showDeck (int deck[]); 
void shuffleDeck (int deck[]); 
int getBet(); 

main() 
{ 
    int deck[52]; 
    int playerBet; 
    char z; 
    initDeck(deck); 
    shuffleDeck(deck); 
    showDeck(deck); 
    playerBet = getBet(); 
    //scanf ("%d\n", &playerBet); 
    printf("%d\n", playerBet); 
    z = 1; 
    getchar(z); 

    return 0; 
} 

void initDeck (int deck[]){ 
    int k; 
    int i; 
    for (k = 1; k < 53; k++){ 
     i = k - 1; 
     deck[i] = k; 
    } 
    return; 
} 

void showDeck (int deck[]){ 
    int k; 
    for (k = 0; k < 52; k++){ 
     printf("%d\n", deck[k]); 
    } 
    return; 
} 

void shuffleDeck (int deck[]){ 
    int random; 
    int k; 
    int temp; 
    srand(time(0)); 
    for (k = 52; k > 1; k--){ 
     random = (rand() % k) + 1; 
     if (random != k){ 
      temp = deck[k - 1]; 
      deck[k - 1] = deck[random - 1]; 
      deck[random- 1] = temp; 
     } 
     else{ 
      k++; 
      continue; 
     } 
    } 


    return; 
} 

int getBet(){ 
    int bet; 
    scanf ("%d\n", &bet); 
    return bet; 
} 

Die Funktion in Frage ist getBet() und wenn ich eine ganze Zahl eingeben, gibt es mir keine Ausgabe. Ich habe versucht, die Eingabe in main und es hat funktioniert, aber ich sehe das Problem damit nicht. Ich habe ein paar Mal auf kleine Fehler überprüft, und ich sehe nichts falsch daran ...Der Versuch, die Eingabe von einer Funktion in C

Antwort

2

Statt

scanf("%d\n", &bet); 

tun

scanf("%d", &bet); 

gerade getestet und es funktioniert.

+0

Es funktioniert, aber ich verstehe nicht unbedingt warum. In der Hauptfunktion war es die gleiche Zeile und doch funktionierte es. Und ohne das \ n schließt das Programm sofort, da (aus mir unbekannten Gründen) der Befehl getchar es nicht stoppt. –

+0

Sie können den Beitrag von Martin unten lesen, er machte eine gute Erklärung. –

0

Ich sehe auch nicht den Fehler. Warum gibst du es nicht an Adresse weiter?

Ich mache nicht C, aber das ist die allgemeine Idee.

+1

Sollte es nicht 'void getBet (int * bet)' sein? – quosoo

+0

Oh ja, guter Punkt. Fest. – jkeys

4

Das Problem ist, dass Sie Ihre scanf-Zeichenfolge mit einem Zeilenumbruch beenden. Das bedeutet (lesen Sie die scanf-Dokumentation) jede Menge Leerzeichen. Wenn Sie also "" eingeben, wartet es immer noch auf mehr Leerraum. Versuchen Sie später, Leerzeichen einzugeben, um zu sehen, dass die Eingabe akzeptiert wird. Wie Artem sagt, könnte das Weglassen des \ n eine Lösung sein.

Verwandte Themen