Maison  >  Article  >  développement back-end  >  Résoudre les problèmes courants de la fonction scanf et leurs solutions

Résoudre les problèmes courants de la fonction scanf et leurs solutions

王林
王林original
2024-02-18 12:58:191055parcourir

Résoudre les problèmes courants de la fonction scanf et leurs solutions

Compréhension approfondie des problèmes courants et des solutions de la fonction scanf en langage C

Introduction :
En langage C, la fonction d'entrée scanf est l'une des fonctions les plus couramment utilisées, qui est utilisée pour recevoir les entrées de l'utilisateur de le flux d'entrée standard. Cependant, en raison des caractéristiques complexes et de l’utilisation de la fonction scanf, certains problèmes sont souvent rencontrés. Cet article présentera en détail les problèmes courants de la fonction scanf, et donnera des solutions et des exemples de code spécifiques.

1. La valeur de retour de la fonction scanf
Lors de l'utilisation de la fonction scanf, nous devons faire attention à sa valeur de retour. La fonction scanf renvoie le nombre d'éléments lus et convertis avec succès. Si la valeur de retour est inférieure au nombre de paramètres, cela signifie qu'il existe des valeurs d'entrée qui n'ont pas été lues avec succès. Cette valeur de retour est souvent utilisée pour déterminer si la saisie de l'utilisateur est légale. Voici un exemple de code :

#include <stdio.h>

int main() {
    int num1, num2, result;
    
    printf("请输入两个整数:");
    if (scanf("%d %d", &num1, &num2) != 2) {
        printf("输入错误,请输入两个整数。
");
        return 1;
    }
    
    result = num1 + num2;
    printf("两个整数的和为:%d
", result);
    
    return 0;
}

Dans le code ci-dessus, la fonction scanf est utilisée pour recevoir deux entiers saisis par l'utilisateur. Si la valeur d'entrée ne répond pas aux exigences (c'est-à-dire deux entiers), un message d'erreur sera imprimé. et un code d'erreur sera renvoyé.

2. Problème de mise en mémoire tampon d'entrée de la fonction scanf
La fonction scanf placera les données saisies par l'utilisateur dans le tampon d'entrée lors de la saisie, puis les convertira selon les règles de la chaîne de format. Cependant, en raison des caractéristiques du tampon d'entrée, des problèmes tels que des boucles infinies ou des lectures incomplètes peuvent facilement survenir. Voici un exemple de code pour certains problèmes et solutions courants de mise en mémoire tampon d'entrée :

  1. Effacer le tampon d'entrée
#include <stdio.h>

int main() {
    int num;
    char ch;
    
    printf("请输入一个整数:");
    scanf("%d", &num);
    
    // 清空输入缓冲区
    while ((ch = getchar()) != '
' && ch != EOF);
    
    printf("输入的整数是:%d
", num);
    
    return 0;
}

Dans le code ci-dessus, si l'utilisateur saisit un entier puis saisit des caractères supplémentaires (tels que des lettres), en effaçant le tampon d'entrée en un seul cycle, vous pouvez éviter que des caractères inutiles n'interfèrent avec la saisie ultérieure.

  1. Utilisez la fonction fgets au lieu de scanf
#include <stdio.h>

int main() {
    char name[20];
    
    printf("请输入您的姓名:");
    fgets(name, sizeof(name), stdin);
    
    printf("您的姓名是:%s
", name);
    
    return 0;
}

Dans le code ci-dessus, la fonction fgets est utilisée à la place de la fonction scanf, ce qui peut éviter le problème de lecture incomplète lors de la saisie d'une chaîne.

3. Le problème de la chaîne de format de la fonction scanf
La chaîne de format de la fonction scanf est utilisée pour indiquer le format et le type de l'entrée. Lors de l'utilisation, vous devez faire attention à l'exactitude et à la rationalité de la chaîne de format. Voici un exemple de code pour certains problèmes courants de chaîne de format et leurs solutions :

  1. Ignorer des caractères spécifiques
#include <stdio.h>

int main() {
    char ch;
    
    printf("请输入一个字符:");
    scanf(" %c", &ch);  // 注意前面的空格
    
    printf("输入的字符是:%c
", ch);
    
    return 0;
}

Dans le code ci-dessus, puisqu'un espace est ajouté devant la chaîne de format, les espaces saisis par l'utilisateur peuvent être ignorés. Caractères spéciaux tels que les tabulations.

  1. Contrôlez la longueur de l'entrée
#include <stdio.h>

int main() {
    char str[10];
    
    printf("请输入一个字符串(最多10个字符):");
    scanf("%9s", str);
    
    printf("输入的字符串是:%s
", str);
    
    return 0;
}

Dans le code ci-dessus, en limitant la longueur de la chaîne à un maximum de 9 caractères dans la chaîne de format, vous pouvez éviter la situation où l'entrée de l'utilisateur dépasse la taille du tableau cible.

Résumé :
Cet article fournit une compréhension approfondie des problèmes courants liés à la fonction scanf en langage C, et fournit des solutions et des exemples de code spécifiques. En utilisant rationnellement les valeurs de retour, en résolvant les problèmes de mise en mémoire tampon d'entrée et en contrôlant les chaînes de format, nous pouvons mieux utiliser la fonction scanf et éviter certaines erreurs courantes. J'espère que cet article pourra aider les lecteurs à comprendre et à utiliser la fonction scanf.

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