[英]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]
與a
, b
或c
進行比較。
如果在循環中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, c
或A, 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.