在我之前的问题中,我得到了这个答案,如果用户在国家名称中输入超过5个字符,它将输出错误。
#include <iostream>
#include <iomanip>
int main()
{
using namespace std;
const int maxchar = 5;
string nationname;
cout << "What is the name of your nation?" << endl;
cin >> nationname;
if (nationname.size() > maxchar)
{
cout << "The input is too long." << endl;
return 1;
}
}
我想要它,以便它在输出错误后循环回“cout&lt;&lt;&lt; name is ...”。
谢谢!
有人在我之前的问题上回答了评论中的问题,但我没有让它工作/我不知道如何或在哪里将它放在我的代码中。
答案 0 :(得分:2)
至少对我来说,到目前为止你得到的回答看起来有点笨拙。 IMO,这需要使用很少,很少被忽略的do / while循环:
bool show_error() {
return std::cout << "The input is too long.\n";
}
int main() {
static const int maxchar = 5;
std::string nationname;
do {
std::cout << "What is the name of your nation?\n";
} while (std::cin >> nationname && nationname.size() > maxchar && show_error());
}
至于为什么我认为这更好:首先,除非这样做是完全不合理的,否则将循环条件写为循环条件要好得多,而不是while (1)
后跟一个循环内的某个条件break
。其次,如果您总是希望循环至少执行一次,则do
/ while
循环是正确的循环。当有合理的可能性循环根本不执行时(/如果条件为假),应该使用while
循环。最后,虽然它可以说是一个相当小的点,但它也会测试每个输入和输出操作的结果,如果失败则会中断循环。如果不这样做,不正确的输入可能导致无限循环,其中读取尝试失败,但将数据留在输入流中,因此下一次迭代将再次失败(无需等待用户输入更多数据) )。
顺便说一句:我建议不要使用std::endl
这么多(或者可能根本)。养成只需要换行时使用\n
的习惯,并在/如果要刷新流时使用std::flush
。
答案 1 :(得分:1)
while(1){
cin >> nationname;
if (nationname.size() <= maxchar)
break;
else{
cout << "The input is too long." << endl;
}
}
答案 2 :(得分:0)
在函数中添加while循环,以便在错误时继续输入。
int main()
{
using namespace std;
const int maxchar = 5;
string nationname;
while(1)
{
cout << "What is the name of your nation?" << endl;
cin >> nationname;
if (nationname.size() > maxchar)
{
cout << "The input is too long." << endl;
}
else
{
break;
}
}
return 1;
}
答案 3 :(得分:0)
当输入字符串的长度太长时,你基本上需要一个循环来让用户输入新的答案。
尝试以下(遵循原始逻辑):
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
const int maxchar = 5;
string nationname;
while (true)
{
cout << "What is the name of your nation?" << endl;
cin >> nationname;
if (nationname.size() > maxchar)
{
cout << "The input is too long." << endl;
continue;
}
else
{
cout << "input nation is: " << nationname <<endl;
break;
}
}
return 0;
}
答案 4 :(得分:0)
const int maxchar = 5;
string nationname;
while(!(nationname.size()>0 && nationname.size()<maxchar)){
nationname="";
cout << "The input has to be smaller than "<<maxchar<<" characters and has"
<<" to contain at least 1 character."
cin >> nationname;
}
//nationname is as supposed to be
答案 5 :(得分:0)
#include "stdafx.h"
#include <iostream>
#include <string>
int main()
{
//declare a string variable called
nationName
std::string nationName;
std::cout << " Please enter youre
Nation name,\n Names must be no
longer than 20 characters in
length\n and must not contain any
numbers. . ." "\n""\n";
//Get input from user
getline(std::cin, nationName);
//validate the length of the name
variable, if it is greater than 20
characters display an error
while (name.length() >= 20)
{
std::cout << " sorry you have
entered incorect data\n Please try
again . . . ""\n""\n";
getline(std::cin, name);
}
//if the name is entered correctly
loop exists and displays
std::cout << nationName <<
std::endl;
return 0;
}