我正在尝试构建一个程序,其中将您的姓名和姓氏作为输入(到目前为止),并将其传递给即将到来的函数。现在,我正在尝试在递归函数中重置变量,因为我想到了以下情况:如果有人以某种方式弄乱了他们的姓名,我想给他们一个机会再写一次...但是程序不会删除“不良”数据,并保留该数据,无论用户将其姓名写错了多少次。到目前为止,这是代码:
#include <iostream>
using namespace std;
string name_data()
{
string name;
string surname;
cout<<"Welcome to CV/resume creator. Please enter your surname: "<<endl;
cin>>surname;
cout<<endl<<"Now please enter your name: "<<endl;
cin>>name;
bool false_characters=false;
string unallowed="!@#$%^&*()1234567890";
for(int i=0; i<unallowed.size(); i++){
for(int j=0; j<surname.size(); j++){
if(unallowed[i]==surname[j]){
cout<<"Sorry, your surname cannot possibly contain those characters in it (unless you're Elon Musk's heir).\nReturning to beginning..."<<endl;
false_characters=true;
name_data();
}
}
for(int k=0; k<name.size(); k++){
if(unallowed[i]==name[k]){
cout<<"Sorry, your name cannot possibly contain those characters in it (unless you're Elon Musk's heir).\nReturning to beginning..."<<endl;
false_characters=true;
name_data();
}
}
}
string confirmation;
if(false_characters!=true){
cout<<endl<<"Your name is "+surname+" "+name+". Is that correct?"<<endl;
cin>>confirmation;
if(confirmation=="no"){
cout<<"Back to beginning..."<<endl<<endl;
surname.clear();
name.clear();
name_data();
}
}
string full_name=surname+" "+name;
return full_name;
}
int main()
{
cout<<name_data();
return 0;
}
答案 0 :(得分:3)
当您需要更正数据时,请调用:let g:netrw_browsex_viewer= "firefox -P user"
,它会执行,然后返回到数据损坏的范围。相反,您需要使数据不正确的范围返回新范围中的数据,因此请执行以下操作。使它不仅返回呼叫,而且
name_data();
请注意,在进行的每个调用堆栈中都有独立的数据,因此不需要if(confirmation=="no"){
cout<<"Back to beginning..."<<endl<<endl;
return name_data();
}
。
最好将递归样式更改为
clear()
避免了数据成本和重复成本。
答案 1 :(得分:2)
您已在函数中声明了SessionService
和name
局部变量。当您再次调用该函数时,将创建这些变量的另一个副本。要使用递归调用中收集的值,您必须返回它们并将其存储在调用代码中,但您的递归调用语句
surname
删除返回值。您可以:
name_data();
)答案 2 :(得分:1)
非常感谢你们提供的解决方案。现在,我根据您的提示和建议进行了更正,它可以按我的意愿工作。这是针对感兴趣的人的修改后的代码:
#include <iostream>
using namespace std;
string name_data()
{
string name;
string surname;
cout<<"Welcome to CV/resume creator. Please enter your surname: "<<endl;
cin>>surname;
cout<<endl<<"Now please enter your name: "<<endl;
cin>>name;
bool false_characters=false;
string unallowed="!@#$%^&*()1234567890";
for(int i=0; i<unallowed.size(); i++){
for(int j=0; j<surname.size(); j++){
if(unallowed[i]==surname[j]){
cout<<"Sorry, your surname cannot possibly contain those characters in it (unless you're Elon Musk's heir).\nReturning to beginning..."<<endl;
false_characters=true;
return name_data();
}
}
for(int k=0; k<name.size(); k++){
if(unallowed[i]==name[k]){
cout<<"Sorry, your name cannot possibly contain those characters in it (unless you're Elon Musk's heir).\nReturning to beginning..."<<endl;
false_characters=true;
return name_data();
}
}
}
string confirmation;
if(false_characters!=true){
cout<<endl<<"Your name is "+surname+" "+name+". Is that correct?"<<endl;
cin>>confirmation;
if(confirmation=="no"){
cout<<"Back to beginning..."<<endl<<endl;
return name_data();
}
}
string full_name=surname+" "+name;
return full_name;
}
int main()
{
cout<<name_data();
return 0;
}