J'ai quelques problèmes, que je pense sont étroitement liés, mais je ne pouvais pas les obtenir après ce que j'ai trouvé sur le site.Deuxième cin est soit sauté ou ne fonctionne pas correctement
Mes problèmes sont liés à la double utilisation de cin
dans ma fonction principale. J'ai besoin de lire les chiffres du clavier pour construire de petits vecteurs ou stocker des coefficients simples. Je ne peux pas savoir à l'avance la longueur des vecteurs que je vais construire.
Voici les lignes concernées:
#include <vector>
#include <iostream>
#include <limits>
int main() {
...
double a=0;
std::vector<double> coefficients;
while (std::cin>>a) {
coefficients.push_back(a);
}
...
std::vector<double> interval;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max());
while(std::cin>>a) {
interval.push_back(a);
}
std::cout<<interval.size()<<std::endl;
std::cout<<*interval.cbegin()<<" "<<*(interval.cend()-1)<<std::endl;
...
}
J'utilise à la fois macOS avec g ++ 6.3.0 et Linux avec g ++ 5.3.0. Les drapeaux que j'envoie au compilateur sont -Wall -std=c++14 -o
.
Sur la machine macOS, la seconde cin est complètement ignorée, tandis que sur la machine Linux, le second processus de lecture ne se comporte pas comme prévu. Je veux dire que si je donne -1 1
au second cin
, la taille du vecteur imprimé est 0 et, évidemment, le programme s'arrête à cause d'un défaut de segmentation.
À chaque cin
, entrez les numéros demandés sur une seule ligne, comme 1 0 0 1
, puis appuyez sur Entrée, puis sur ctrl + D.
Merci d'avance à tous! :)
Avez-vous envisagé d'utiliser 'getline' à la place? – molbdnilo
Ouais je l'ai fait et que, en plus de se débarrasser de la ligne 'cin.ignore', laisse mon code s'exécuter comme prévu sur la machine Linux. Cependant, ce n'est pas le cas pour le macOS. Alors, je devrais abandonner 'cin' une fois pour toutes? – Sandro