Comprendre le principe de fonctionnement de la fonction scanf en langage C et analyse des problèmes courants
La fonction scanf en langage C est une fonction d'entrée, son rôle est de lire les données du flux d'entrée standard (généralement le clavier) et convertissez-le Stockez-le dans une variable. La fonction scanf est une fonction très couramment utilisée, mais en raison de son principe de fonctionnement complexe et de ses problèmes courants, de nombreux débutants rencontrent des confusions et des difficultés lors de son utilisation.
Le prototype de la fonction scanf est : int scanf(const char *format, ...)
Parmi eux, le paramètre format est une chaîne de format, qui spécifie les données à lire. Le type et le format, ainsi que l'emplacement de la variable à enregistrer. ... représente une liste d'arguments variadique, utilisée pour recevoir un nombre indéfini de variables. La fonction
scanf lit les données du flux d'entrée selon le format spécifié dans la chaîne de format et les convertit au type spécifié. Il ignore les caractères d'espacement dans l'entrée jusqu'à ce qu'un caractère autre qu'un espace soit rencontré. Ensuite, il analysera les caractères saisis selon les instructions de la chaîne de format, les convertira dans le type de données correspondant et les stockera dans les variables correspondantes.
2.1 Problème de tampon d'entrée
Lors de la lecture des données, la fonction scanf lira et convertira les données dans le tampon d'entrée une par une s'il n'y a pas assez de données dans le tampon d'entrée, ou l'entrée. le format des données ne correspond pas au format spécifié dans la chaîne de format, provoquant une erreur.
Par exemple, lorsque des caractères non numériques sont saisis dans le tampon d'entrée, la fonction scanf arrêtera la lecture lorsqu'elle rencontrera des caractères sans correspondance, et les caractères non lus continueront à rester dans le tampon d'entrée. Cela entraînera la lecture de données incorrectes par les fonctions scanf suivantes. Une façon de résoudre ce problème consiste à utiliser du code supplémentaire pour vider 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; }
2.2 Problème de caractère de nouvelle ligne
Étant donné que le caractère de nouvelle ligne '
' en langage C est également un caractère valide, lors de la lecture d'une chaîne, si la chaîne de format ne spécifie pas explicitement d'ignorer le caractère de nouvelle ligne, alors le caractère de nouvelle ligne sera des caractères sera lu dans le cadre de la chaîne.
Par exemple, lorsque vous utilisez "%s" pour lire une chaîne, si la chaîne d'entrée contient des espaces et des nouvelles lignes, la fonction scanf arrêtera la lecture au premier caractère d'espace ou de nouvelle ligne.
#include <stdio.h> int main() { char str[10]; printf("请输入字符串:"); scanf("%s", str); printf("输入的字符串是:%s ", str); return 0; }
Pour résoudre ce problème, vous pouvez utiliser "[^
]" pour spécifier la chaîne de format afin d'éviter de lire les nouvelles lignes. La fonction
#include <stdio.h> int main() { char str[10]; printf("请输入字符串:"); scanf("%[^ ]", str); printf("输入的字符串是:%s ", str); return 0; }
scanf est une fonction d'entrée très importante en langage C, mais en raison de son principe de fonctionnement complexe et de ses problèmes courants, vous devez faire attention lorsque vous l'utilisez. Cet article présente le principe de fonctionnement et les problèmes courants de la fonction scanf, et donne des exemples de code correspondants.
Lorsque vous utilisez la fonction scanf, vous devez faire attention au problème du tampon d'entrée et au problème des caractères de nouvelle ligne, et prendre les solutions correspondantes en fonction de la situation spécifique. En comprenant profondément le fonctionnement de la fonction scanf, vous pourrez mieux utiliser cette fonction pour résoudre des problèmes pratiques.
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!