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次に、少なくとも 1 回はループを実行する必要がある場合は、do/whileループが適しています。あwhileloop は、ループがまったく実行されない可能性が十分にある場合 (条件が false の場合) に使用する必要があります。最後に、これは間違いなくかなりマイナーなポイントですが、これは各入力操作と出力操作の結果もテストし、どちらかが失敗した場合はループから抜け出します。そうしないと、誤った入力によって無限ループが発生し、読み取りの試行は失敗しますが、入力ストリームにデータが残るため、次の反復は (ユーザーがさらにデータを入力するのを待たずに) 再び失敗します。 )。

余談ですが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 に答える