c ++输入字符或字符串的检查长度是1?

时间:2016-11-05 00:10:49

标签: c++ string character

所以我最初使用cin让用户输入一个字符。然后,如果此字符不是a,b或c,它将继续循环并输出错误消息。但是,如果用户输入多个字符,则会多次打印错误消息。所以现在我正在使用scanf接收一个字符串并检查长度是否为1.这是直接的,根本不工作。

string enterLetter() {
    string n;
    scanf("%s", &n);
    return n;

}


void main() {
    string ch = "";
    cout << "Type a, b, or c: ";


    while (ch != "a" && ch != "b" && ch != "c"){
        while (ch.length() != 1) {
            ch = enterLetter();
            cout << ch.length();
        }
        ch = tolower((char)ch.c_str());
        cout << "\n" << ch;


    }

3 个答案:

答案 0 :(得分:0)

您可以使用cin.getline()读取由 Enter 键终止的整行用户输入。

char str[64];
cin.getline(str, sizeof(str));

如果strlen(str)不等于1,则可能引发错误。否则,str[0]可与abc进行比较。

如果你在循环中scanf一个字符串,它将返回由空格(空格键或换行符号)终止的第一组字符。在下一次迭代中,它将读取下一个字符串,因此。如果用户输入"abc def\n"之类的内容,则scanf将首先返回abc,然后返回def。如果您使用cin.getline(),则在第一次调用cin.getline()时将返回在换行符之前输入的所有字符,即"abc def"

答案 1 :(得分:0)

您不需要,也不应该使用string。使用charscanf效果更好。

int main() {
  char ch;
  cout << "Type a, b, or c: ";
  scanf("%c", &ch);

  while ((ch > 'C' && ch < 'a') || ch > 'c' || ch < 'A' ) {
    if (ch >= 'A' && ch <= 'Z')
      ch += ('a' - 'A');
    cout << endl << ch;
    cout << endl << "Enter a, b, or c: ";
    scanf("%c", &ch);
  }
}

这使用scanf来获取char ch。它在char不是a, b, cA, B, C时循环(因为您似乎想要一个大写的用例)。如果char为大写,则会转换为小写,然后输出char

答案 2 :(得分:0)

您不能像scanf("%s")一样使用std::stringscanf("%s")预计会预先分配char[]。如果您想阅读std::string,请改为使用std::cin.operator>>()std::getline()

char enterLetter() {
    string n;
    do {
        std::getline(std::cin, n);
    }
    while (n.length() != 1);
    return n[0];
}

int main() {
    char ch;
    do {
        std::cout << "Type a, b, or c: ";
        ch = enterLetter();
    }
    while ((ch != 'a') && (ch != 'b') && (ch != 'c'));

    std::cout << ch;

    return 0;
}