Travail de scanf et de vérifier si l'entrée est de type int

Je voulais vérifier si la donnée d'entrée est une entrée entière ou non. Je n'ai pas voulu enregistrer l'entrée dans une chaîne de caractères. Après avoir vu plusieurs questions sur stackoverflow et par hit et essai, j'ai créé le code suivant

while(scanf("%d%c",&num,&a) != 2 || a != '\n')
{
    printf("Please enter an integer only : ");
    if(a == '\n')
        scanf("%c",&a);
    else
    {
        while(a != '\n')
            scanf("%c",&a);
    }
}

Il fonctionne, mais selon ma compréhension, les éléments suivants ont également travaillé

while(scanf("%d%c",&num,&a) != 2 || a != '\n')
{
    printf("Please enter an integer only : ");
    while(a != '\n')
        scanf("%c",&a);
}

Quelqu'un peut-il me dire pourquoi ci-dessus n'a pas fonctionné ?? Aussi si quelqu'un a une meilleure solution s'il vous plaît donner aussi.

Note :j'envisage 12qwe aussi comme une entrée non valide. Je veux juste entiers.

Peut-être "%d%n" format que vous avez besoin. Vous pouvez aussi vérifier scanf()s valeur de retour.
J'ai fait ce que vous avez dit. Mais ce qu'elle fait est qu'il vérifie pour la partie entière correctement. Mais quand entier est entré correctement, il saute prochain scanf() dans mon code. Ne /n reste dans le tampon ici ?? Je pense qu'il ne devrait pas.
Non, je voulais dire "%d%n". %n indique le nombre de frapper un consommé de caractères: dans votre cas, le nombre de caractères numériques dans la chaîne d'entrée. Après cela, vous pouvez en boucle jusqu'à ce que vous obtenez un '\n'. (en fait, vous ne t besoin de l' %n; il suffit de lire un %d, et que la boucle jusqu'à ce que '\n')
Deuxième code se bloque entrer qwe en entrée deux fois. Vous verrez les sorties "Entrez un entier : ", à l'infini.
si je viens de lire un entier et en boucle jusqu'à l' /n, il sera à l'exception 12qwe comme une entrée valide (Pas sûr mais je pense que ça va). Je n'en veux pas. Et plus tôt, j'ai utilisé le %d/n par erreur. Mais maintenant, quand vous avez dit que l'utilisation de %de n, je pense qu'il ne respecte pas l'obligation dans ce cas

OriginalL'auteur Sahil | 2012-10-24