这是一个大学项目,它所要做的就是向用户询问信息然后输出。这部分已经完成,所以项目已经完成(我不是在寻求学校工作的帮助)。
我决定为了好玩而添加更多内容。当用户输入任何内容时(我只是点击输入),我试图让它知道并告诉用户这样做并重新开始。在它开始不止一次之后,它输出最后一个" cout"然而很多时候用户没有回答某些事情(只需点击输入)。我无法弄清楚原因。
输出:
回答每个问题,以便让这个文字游戏正常运作。
你叫什么名字? 12
你多大了? 12
你是哪里人? 12你大学的名字是什么? 12
你的职业是什么? 12
你的宠物是什么类型的动物? 12
她/她的名字是什么? 12
曾经有一个名叫12岁的人住在12岁.12岁时,12岁12岁就读大学.12岁毕业,12岁就去上班。然后,12人采用了12个名为12岁的人。他们从此过上幸福的生活!
曾经有一个名叫12岁的人住在这里。在12岁时,12岁时12岁就读到了大学.12岁毕业并上班。然后,12人采用了一个名为12的(n)12。他们都过着幸福的生活!
曾经有一个名叫12岁的人住在12岁.12岁时,12岁12岁就读大学.12岁毕业,12岁就去上班。然后,12人采用了一个名为12岁的人。从此以后幸福快乐!
按任意键继续。 。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name, city, college, prof, animal, petn;
int age;
// If no value is given for a question, start over.
struct NoValue
{
static void check(string a, int cls = 100)
{
if (a.empty())
{
cout << "\n\nAnswers cannot be blank, let's try this again..." << endl;
cin.get(); // Pause
for (int i = 0; i <= cls; i++) //
cout << "\n" << endl; // Clear screen
main();
}
}
};
cout << "Answer every question in order for this word game to work properly.\n\n";
// Questions
cout << "What is your name? ";
getline(cin, name);
cout << "How old are you? ";
cin >> age;
cin.ignore(); // To prevent the program from printing out the next 2 questions in the same line.
cout << "Where are you from? ";
getline(cin, city);
cout << "What's the name of your college? ";
getline(cin, college);
cout << "What is your profession? ";
getline(cin, prof);
cout << "What type of animal is your pet? ";
getline(cin, animal);
cout << "and what is her/his name? ";
getline(cin, petn);
NoValue::check(name);
NoValue::check(city);
NoValue::check(college);
NoValue::check(prof);
NoValue::check(animal);
NoValue::check(petn);
cout << "\nThere once was a person named " << name << " who lived in " << city
<< ". At the age of " << age << ", " << name << " went to college at " << college
<< ". " << name << " graduated and went to work as a " << prof << ". Then, " << name
<< " adopted a(n) " << animal << " named " << petn << ". They both lived happily ever after!\n\n" << endl;
return 0;
}
答案 0 :(得分:1)
你写道:
“我无法弄明白为什么。”;
所以我假设问题是:
“你们能帮助我弄清楚发生了什么事情,以便找到解决办法吗?”
如果是这种情况,现在就是这样。
主要首次启动(让我们将此命名为FIRST_MAIN)。
在FIRST_MAIN中,“用户”在执行行时错过了动物类型
cout << "What type of animal is your pet? ";
getline(cin, animal);
但是FIRST_MAIN继续执行并开始检查用户输入 当FIRST_MAIN开始执行行
时NoValue::check(animal);
在检查方法(动物类型)中,FIRST_MAIN打印错误信息,清除屏幕并启动A SECOND_MAIN。
注意:现在运行FIRST_MAIN的SECOND_MAIN ID正在等待 为SECOND_MAIN完成。记住FIRST_MAIN必须这样做 完成检查方法并继续执行剩余的行
我们假设现在(在SECOND_MAIN中)用户做了一切正确的事,所有检查都没问题。
现在SECOND_MAIN打印出故事,SECOND_MAIN到达行
return 0
谁打电话给SECOND_MAIN?
它是FIRST_MAIN,称为SECOND_MAIN!
所以SECOND_MAIN唤醒正在等待SECOND_MAIN完成的FIRST_MAIN。
因此,FIRST_MAIN将继续从
执行行main();
现在,FIRST_MAIN完成检查(对于错过的动物类型)并继续下一行
NoValue::check(petn);
在这里,FIRST_MAIN打印出了MISSING动物类型的故事。
我认为现在你已经知道发生了什么 如何解决这个问题?这是另一个问题: - )
答案 1 :(得分:0)
你有方法检查,它检查空白输入,如果是空白,则调用main。问题是,一旦完成,它将从调用check的地方恢复。我建议检查返回bool
,指示是否继续检查和打印,如下所示:
if(!NoValue::check(name))
return 0;
答案 2 :(得分:0)
如果输入的字符串是数字,只需检查strtol。 如果是数字,则仅在询问when数值时才存储该值,否则返回错误。 如果询问字符串值但是用户inser数值则给出错误。
Here strtol
的参考资料