c++输入字符或校验字符串的长度为1

c++ input character or check length of string is 1?

本文关键字:字符串 输入 字符 校验 c++      更新时间:2023-10-16

所以我最初使用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;

    }

您不能像尝试那样使用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;
}

您不需要,也不应该为此使用stringcharscanf一起使用效果更好。

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

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

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

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

如果在循环中scanf字符串,它将返回以空格(空格或换行字符)结束的第一组字符。在下一次迭代中,它将读取下一个字符串,以此类推。如果用户输入类似"abc defn"的值,scanf将首先返回abc,然后是def。如果使用cin.getline(),则在第一次调用cin.getline()时将返回在换行符之前输入的所有字符,即"abc def"