如何摆脱这个do-while循环?

时间:2014-11-14 21:14:45

标签: c++ do-while stl-algorithm

我正在尝试创建一个插入一串字符的程序,验证它,然后对其进行排序并打印出来。

我确定这里有一个明显的逻辑错误,有人可以帮忙指出来吗?我花了好几个小时盯着我的屏幕。在我对C ++的有限知识中,我尝试了所有我知道的东西,但我仍然无法使这件事发挥作用。

你能提供的任何东西都会以某种方式帮助我,即使它是居高临下的。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

void mySort(string &s);

int main()
{
    string str;
    char c;
    bool invalid = true;

    cout<<"Please enter some alphabetical characters:"<<endl;
    cout<<"(* to end input): ";

    do
    {
      getline(cin, str, '*');

      for(int i = 0; i < str.length(); i++)
      {
        c = str.at(i);
      }

      if(! ( ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) ) )
      {
         cout<<"Error!"<<endl;
      }
      else
      {
        (invalid==false);
        cout<<"You entered: "<<str<<endl;
        mySort(str);
      }
    } while(invalid==true);

    system("PAUSE");
    return(0);
}

void mySort(string &s)
{
    sort(s.begin(), s.end());
    cout<<"The string after sorting is: "<<s<<endl;
}

我几乎可以肯定验证的问题在于这一行:

if(! ( ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) ) )

我确定我的bool也是错误的。

任何东西,任何东西,因为这个原因,我浪费了几个小时的时间撞到了墙上。

4 个答案:

答案 0 :(得分:5)

您永远不会将invalid设置为true以外的任何内容。

这一行:

(invalid==false);

应该是:

invalid = false;

以前的版本 invalidfalse进行比较,然后丢弃比较结果。什么都没有改变。

答案 1 :(得分:3)

(invalid==false);应为invalid=false;

答案 2 :(得分:2)

首先改变:

(invalid == false);
invalid = false;

答案 3 :(得分:0)

正如其他人所说,您没有正确分配invalid变量。您也没有正确验证输入字符串。循环遍历整个字符串,然后仅验证最后看到的字符,而不是在循环时验证每个字符。

我建议重新编写循环来摆脱invalid变量并修复验证,例如:

int main()
{
    string str;
    char c;

    do
    {
        cout << "Please enter some alphabetical characters:" << endl;
        cout << "(* to end input): ";

        if (!getline(cin, str, '*'))
            break;

        if (str.empty())
            cout << "You did not enter anything!" << endl;

        else if (str.find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") != string::npos)
            cout << "Error! Bad input" << endl;

        else
        {
            cout << "You entered: " << str << endl;
            mySort(str);
            break;
        }
      }
    }
    while (true);

    system("PAUSE");
    return 0;
}