簡體   English   中英

c + +輸入字符或檢查字符串的長度為1?

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

因此,我最初使用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;


    }

您可以使用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"

您不需要,也不必為此使用string scanf一起使用char效果更好。

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

您不能像嘗試那樣將scanf("%s")std::string一起使用。 scanf("%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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM