Maison  >  Article  >  développement back-end  >  Analyser les problèmes courants de format d'entrée de la fonction scanf du langage C

Analyser les problèmes courants de format d'entrée de la fonction scanf du langage C

王林
王林original
2024-02-19 09:30:08753parcourir

Analyser les problèmes courants de format dentrée de la fonction scanf du langage C

Analyse des questions fréquemment posées sur le format d'entrée scanf en langage C

Dans le processus de programmation en langage C, la fonction de saisie est très importante pour le fonctionnement du programme. Nous utilisons souvent la fonction scanf pour recevoir les entrées de l'utilisateur. Cependant, en raison de la diversité et de la complexité des entrées, certains problèmes courants peuvent survenir lors de l'utilisation de la fonction scanf. Cet article analysera certains problèmes courants de format d'entrée scanf et fournira des exemples de code spécifiques.

  1. Les caractères saisis ne correspondent pas au format
    Lors de l'utilisation de la fonction scanf, nous devons spécifier le format d'entrée. Par exemple, « %d » signifie saisir un nombre entier et « %f » signifie saisir un nombre à virgule flottante. Des erreurs de saisie se produisent lorsque les caractères saisis par l'utilisateur ne correspondent pas au format spécifié. Voici un exemple de code :
#include <stdio.h>

int main() {
    int num;
    printf("请输入一个整数:");
    scanf("%d", &num);
    printf("您输入的整数是:%d
", num);
    return 0;
}

Lorsque l'utilisateur saisit des caractères non numériques, le programme ne pourra pas lire correctement l'entrée de l'utilisateur, ce qui entraînera des résultats de sortie incorrects. Pour résoudre ce problème, nous pouvons utiliser des boucles et des instructions conditionnelles pour gérer les entrées incorrectes.

#include <stdio.h>

int main() {
    int num;
    printf("请输入一个整数:");
    while (scanf("%d", &num) != 1) {
        printf("输入错误,请重新输入:");
        while (getchar() != '
');
    }
    printf("您输入的整数是:%d
", num);
    return 0;
}

Dans cet exemple, nous déterminons si le format d'entrée est correct en vérifiant la valeur renvoyée par la fonction scanf. En cas d'erreur, nous utilisons une boucle while pour effacer le tampon d'entrée des caractères illégaux et inviter à nouveau l'utilisateur à saisir.

  1. Problèmes avec les espaces ou les nouvelles lignes avant et après
    Les utilisateurs peuvent accidentellement ajouter des espaces ou des nouvelles lignes avant et après la saisie. Si nous utilisons la fonction scanf pour lire l'entrée, ces espaces ou nouvelles lignes peuvent être reconnus par erreur comme des caractères valides, provoquant des erreurs de programme. Par exemple, le code suivant identifie de manière incorrecte deux entrées comme étant la même variable.
#include <stdio.h>

int main() {
    int num1, num2;
    printf("请输入两个整数,用空格分隔:");
    scanf("%d%d", &num1, &num2);
    printf("您输入的两个整数是:%d和%d
", num1, num2);
    return 0;
}

Pour résoudre ce problème, nous pouvons ajouter un espace à la chaîne de format pour ignorer les espaces de début et de fin et les nouvelles lignes.

#include <stdio.h>

int main() {
    int num1, num2;
    printf("请输入两个整数,用空格分隔:");
    scanf(" %d%d", &num1, &num2);
    printf("您输入的两个整数是:%d和%d
", num1, num2);
    return 0;
}

Dans cet exemple, nous avons ajouté un espace devant "%d" afin que la fonction scanf ignore l'espace ou le caractère de nouvelle ligne précédent.

  1. Problème de tampon d'entrée
    En langage C, l'opération de saisie stockera les caractères d'entrée dans le tampon d'entrée. Chaque fois que la fonction scanf lit l'entrée, elle extrait les caractères du tampon. S'il y a des caractères non extraits dans le tampon, la fonction scanf utilisera directement les caractères dans le tampon sans attendre la saisie de l'utilisateur. Cela peut conduire à des résultats inattendus. Voici un exemple typique :
#include <stdio.h>

int main() {
    int num;
    char ch;
    printf("请输入一个整数和一个字符:");
    scanf("%d", &num);
    scanf("%c", &ch);
    printf("您输入的整数是:%d
", num);
    printf("您输入的字符是:%c
", ch);
    return 0;
}

Lorsque nous exécutons ce programme et saisissons un entier et un caractère, nous constaterons que le programme se termine directement sans attendre que nous saisissions le caractère. En effet, après la saisie de l'entier, il reste encore un caractère de nouvelle ligne dans le tampon d'entrée qui n'a pas été extrait, ce qui oblige la deuxième fonction scanf à utiliser directement le caractère de nouvelle ligne d'une longueur de 1. Pour éviter cela, nous pouvons ajouter %c avec un espace pour ignorer les nouvelles lignes dans le tampon d'entrée.

#include <stdio.h>

int main() {
    int num;
    char ch;
    printf("请输入一个整数和一个字符:");
    scanf("%d", &num);
    scanf(" %c", &ch);
    printf("您输入的整数是:%d
", num);
    printf("您输入的字符是:%c
", ch);
    return 0;
}

Dans cet exemple, nous ajoutons l'espace avant "%c" à la chaîne de format afin que la fonction scanf ignore les nouvelles lignes dans le tampon d'entrée.

Grâce à l'analyse et aux exemples de code ci-dessus, nous pouvons mieux comprendre les problèmes courants du format d'entrée scanf en langage C et apprendre à gérer ces problèmes de manière raisonnable pour améliorer la robustesse et l'expérience utilisateur du programme. Dans la programmation réelle, nous devons également ajuster le code de manière appropriée en fonction des besoins spécifiques et des scénarios de saisie pour garantir que les entrées de l'utilisateur sont lues correctement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn