2016-10-03 4 views
1
char theInput[10]; 
long option; 
int innerLoop = 1; 
char *dunno; 
while(innerLoop == 1){ 
    printf("\nType '1' to get your change, '2' to select another item, or '3' to add more funds: "); 
    fgets(theInput, sizeof theInput, stdin); 
    option = strtol(theInput, &dunno, 10); 
    if(option == 1){ 
    loop = 0; 
    innerLoop = 0; 
    }else if(option == 2){ 
    loop = 1; 
    outerLoop = 1; 
    innerLoop = 0; 
    firstLoop = 0; 
    }else if(option == 3){ 
    loop = 1; 
    innerLoop = 0; 
    outerLoop = 1; 
    firstLoop = 1; 
    }else{ 
    printf("\nInvalid input, please try again.\n"); 
    innerLoop = 1; 
    } 
} 

Le résultat de ce code est que lors de la première exécution, il imprime le "Type '1" pour obtenir "partie suivie par un saut de ligne suivi de "Entrée non valide, veuillez réessayer". sans prendre aucune entrée de la ligne de commande. Il imprime ensuite la première instruction printf, puis accepte une entrée et fonctionne. Il est destiné à imprimer la première déclaration puis attendre une entrée.Dans une boucle while, fgets() s'exécute en s'auto-prenant dans une nouvelle ligne en tant qu'entrée

Voici la sortie du terminal.

« Type « 1 » pour obtenir votre changement, « 2 » pour sélectionner un autre élément, ou « 3 » pour ajouter plus de fonds:. Entrée non valide, s'il vous plaît essayer à nouveau

Type « 1 » pour obtenir votre changez, '2' pour sélectionner un autre élément, ou '3' pour ajouter plus de fonds: "

+3

Le code que vous avez publié n'imprime pas les éléments que vous mentionnez (par exemple, le type "C" pour obtenir votre modification, "partie"). Il est probable que l'erreur soit dans la partie de votre code que vous n'avez pas affichée. – nos

+0

Merci pour votre réponse. C'est mon erreur de mettre à jour mon code en postant - je l'ai changé de C, N et A à 1, 2, 3 parce que je pensais que le traitement des entiers pourrait être plus facile. J'ai mis à jour le post afin que tout soit comme il fonctionne actuellement sur mon ordinateur. – Vorkos

+2

Un code non affiché plus ancien utilisait une fonction d'entrée qui laissait un '' \ n'' dans 'stdin'. – chux

Répondre

0

Pouvez-vous essayer de vider la sortie stdout?

J'ai ajouté la principale méthode si d'autres personnes aimeraient avoir un exemple de travail:

#include <stdio.h> 

int main() { 
    int loop = 0; 
    int outerLoop = 0; 
    int firstLoop = 0; 

    char theInput[10]; 
    long option; 
    int innerLoop = 1; 
    char *dunno; 
    while(innerLoop == 1){ 
    printf("\nType '1' to get your change, '2' to select another item, or '3' to add more funds: "); 
    fflush(stdout); 
    fgets(theInput, sizeof theInput, stdin); 
    option = strtol(theInput, &dunno, 10); 
    if(option == 1) { 
     loop = 0; 
     innerLoop = 0; 
    }else if(option == 2){ 
     loop = 1; 
     outerLoop = 1; 
     innerLoop = 0; 
     firstLoop = 0; 
    }else if(option == 3){ 
     loop = 1; 
     innerLoop = 0; 
     outerLoop = 1; 
     firstLoop = 1; 
    }else{ 
     printf("\nInvalid input, please try again.\n"); 
     innerLoop = 1; 
    } 
    } 
} 

Avant d'adapter votre code source, vous pouvez essayer d'exécuter cet exemple dans isoltion et pour voir si vous avez la Résultats attendus?