[英]My program keeps looping in the first do...while loop even when condition isn't met
I started learning C++ 3 days ago, and after some experimenting with loops and vector I decided to do something actually useful with it: an Account Manager.我 3 天前开始学习 C++,在对循环和向量进行了一些试验后,我决定用它做一些真正有用的事情:客户经理。
The point is, I'm using a do...while loop, for the 1rst action in my program (which is adding a new website), however past this point, the loop won't end even when the condition isn't met any more.关键是,我正在使用 do...while 循环,用于我程序中的第一个操作(即添加一个新网站),但是过了这一点,即使条件不是,循环也不会结束再遇见。
I tried to debug it for a good 30 minutes and found nothing odd.我试图调试它 30 分钟,但没有发现任何异常。
Here's the code:这是代码:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
/*Introduction
//Ask whether the user(me) wants to open an account already created, add a new one, or remove an existing one
To show credentials a master password is required
I need something that can:
1. Find the place where credentials are supposed to be filled
2. Enter them efficiently
3. Bonus : Submit the data on the website and automatically connect*/
int userAction; // Variable de sélection de la première action
string siteNameVar("site"), urlVar("url"), userNameVar("username"), passwordVar("pass") ;
char sureVerification;
vector<string> siteName(0); // Vectors containing respectively : "The sites names"
vector<string> url(0); // Vectors containing respectively : "The sites urls"
vector<string> userName(0); // Vectors containing respectively : "The usernames"
vector<string> password(0); // Vectors containing respectively : "The passwords"
cout << "What will you do?" << endl;
cout << "1. Add a website account" << endl
<< "2. Connect to an existing account" << endl
<< "3. Delete an account"<< endl;
cin >> userAction; // This is where the user enter his choice
switch (userAction){
case 1: // Add a new element in the vectors
do{
//Site Name
do{
cout << "Enter the site's name (or how you want to call it)" << endl;
cin >> siteNameVar;
cout << "Are you sure? 1 = yes | Anything else = no" << endl;
cin >> sureVerification;
}
while (sureVerification != 1);
//Site's Url
do{
cout << "Enter the site's login page url" << endl;
cin >> urlVar;
cout << "Are you sure? 1 = yes | Anything else = no" << endl;
cin >> sureVerification;
}
while(sureVerification != 1);
url.push_back(urlVar);
// Username
do{
cout << "Enter your account's username" << endl;
cin >> userNameVar;
cout << "Are you sure? 1 = yes | Anything else = no" << endl;
cin >> sureVerification;
}
while(sureVerification != 1);
userName.push_back(userNameVar);
// Password
do{
cout << "Enter your account's password" << endl;
cin >> passwordVar;
cout << "Are you sure? 1 = yes | Anything else = no" << endl;
cin >> sureVerification;
}
while(sureVerification != 1);
password.push_back(passwordVar);
//Display Everything
cout << "So the site's name is :" << siteName.back() << endl
<< "The login page url is :" << url.back() << endl
<< "Your account's username is :" << userName.back() << endl
<< "And your password is :" << password.back() << endl;
//Last verification
cout << "Is everything alright? 1 = yes | Anything else = no" << endl;
cin >> sureVerification;
}
while(sureVerification != 1);
cin.get();
break;
case 2: // Connect to an existing account
cout << "display map element names" << endl;
break;
case 3: // Delete an account
cout << "display map element names2" <<endl;
break;
} // End of the choice sequence
cin.get();
return 0;
}
You should try cleaning the input buffer.您应该尝试清理输入缓冲区。 Use cin.clear() and cin.ignore() before reading the user's input (eg. before cin >> sureVerification)
在读取用户输入之前使用 cin.clear() 和 cin.ignore()(例如在 cin >>sureVerification 之前)
(Posted on behalf of the question author) . (代表问题作者发表) 。
Wow, after comparing an earlier version of my code to the code I posted, and substituting a piece of the old code to the new one (which "oddly" worked), I realized that the problem was all due to the fact that the value-type of sureVerification (read code to understand) was char and in the verification expression I had wrote the 1 (which was equivalent of "Yes" as an int.哇,在将我的代码的早期版本与我发布的代码进行比较,并将一段旧代码替换为新代码(“奇怪”地工作)之后,我意识到问题完全是由于值-sureVerification 的类型(阅读代码以理解)是 char 并且在验证表达式中我写了 1 (相当于“是”作为一个 int。
Problem solved!问题解决了!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.