2

在我之前的问题中,我得到了这个答案,因此如果用户在国家名称中输入超过 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 <<什么是名字......”。

谢谢!

有人在评论中回答了我之前的问题,但我没有让它工作/我不知道如何或将它放在我的代码中的位置。

4

6 回答 6

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何时/是否要刷新流。

于 2013-04-22T02:56:28.630 回答
1
while(1){
    cin >> nationname;
    if (nationname.size() <= maxchar)
        break;
    else{
       cout << "The input is too long." << endl;
    }
}
于 2013-04-22T02:37:27.773 回答
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
于 2013-04-22T02:47:38.937 回答
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;
}
于 2013-04-22T02:38:14.280 回答
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;
}
于 2013-04-22T02:38:38.410 回答
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;

}
于 2014-12-03T21:01:13.093 回答