Maison >développement back-end >C++ >Pourquoi `getline()` ignore-t-il l'entrée après la lecture d'un entier en C ?
Problèmes de saisie avec getline()
Dans un programme C, vous pouvez rencontrer un comportement particulier lors de l'utilisation de getline() pour lire les entrées de l'utilisateur . Plus précisément, si vous demandez un entier, suivez-le avec getline(cin, str), puis un autre entier, vous remarquerez que « Entrer le numéro de compte » apparaît avant de pouvoir saisir « str ».
Cela se produit car getline() capture également le caractère de nouvelle ligne entré après le premier entier. Pour éviter cela, vous pouvez demander à cin d'ignorer les espaces avant de lire « str ». Voici comment :
cout << "Enter number:"; cin >> number; cout << "Enter name:"; cin.ignore(numeric_limits<streamsize>::max(), '\n'); getline(cin, str);
Ici, cin.ignore() ignore tout espace, y compris la nouvelle ligne, avant que getline() ne lise l'entrée de l'utilisateur.
Vous pouvez également utiliser cin.get () pour lire et supprimer explicitement le caractère de nouvelle ligne :
cout << "Enter number:"; cin >> number; cout << "Enter name:"; cin.get(); getline(cin, str);
Cette approche garantit que la nouvelle ligne est consommée et getline() n'essaie pas de le lire.
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!