键盘 ENTER 可以解释为 string::size_type 吗?
Can a keyboard ENTER be interpreted as a string::size_type?
我正在尝试使用此代码将 0-15 之间的整数转换为十六进制:
#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
int main()
{
const string hexstring = "0123456789ABCDEF";
string str;
string::size_type n;
string result_str;
while (cin >> n){
if (n < hexstring.size()){
result_str += hexstring[n];
}
}
cout << result_str << endl;
return 0;
}
我想要的是当用户输入:
12 13 14 15
并按 ENTER,预期输出应为:
CDEF
但是,即使在按下 ENTER 后,系统仍会提示用户输入。我的印象是 ENTER 不是 string::size_type
类型,因此违反了 while
循环条件,导致循环退出。为什么输入 ENTER 后条件仍然成立?
在执行格式化输入时(如您所愿),"Enter" 不是字符也不是终止条件。它只是一片白色space(如space 或制表符),默认情况下会跳过它以进行数据提取。
因此,唯一 "does" 是在您的终端客户端中触发行缓冲,并将到目前为止写入的字符发送到您的程序,在那里处理它们(连同换行符,它被忽略正如我刚才所说)。
如果您想一次读一行,那么使用 std::getline
即可。这将准确读取一行输入。然后你可以用 std::stringstream
或其他东西解析它。
你可以 make std::cin
not skip whitespace,但是你的数字之间的 space 也会结束循环。
如果输入不会中断循环
while (cin >> n){
if (n < hexstring.size()){
result_str += hexstring[n];
}
}
是无限的。
要中断循环,您可以输入一个非数字,例如字母 'A'。
在循环之前你可以输出类似
的提示
std::cout << "Enter a sequence of non-negative numbers. Press 'q' to quit.\n" ;
我正在尝试使用此代码将 0-15 之间的整数转换为十六进制:
#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
int main()
{
const string hexstring = "0123456789ABCDEF";
string str;
string::size_type n;
string result_str;
while (cin >> n){
if (n < hexstring.size()){
result_str += hexstring[n];
}
}
cout << result_str << endl;
return 0;
}
我想要的是当用户输入:
12 13 14 15
并按 ENTER,预期输出应为:
CDEF
但是,即使在按下 ENTER 后,系统仍会提示用户输入。我的印象是 ENTER 不是 string::size_type
类型,因此违反了 while
循环条件,导致循环退出。为什么输入 ENTER 后条件仍然成立?
在执行格式化输入时(如您所愿),"Enter" 不是字符也不是终止条件。它只是一片白色space(如space 或制表符),默认情况下会跳过它以进行数据提取。
因此,唯一 "does" 是在您的终端客户端中触发行缓冲,并将到目前为止写入的字符发送到您的程序,在那里处理它们(连同换行符,它被忽略正如我刚才所说)。
如果您想一次读一行,那么使用 std::getline
即可。这将准确读取一行输入。然后你可以用 std::stringstream
或其他东西解析它。
你可以 make std::cin
not skip whitespace,但是你的数字之间的 space 也会结束循环。
如果输入不会中断循环
while (cin >> n){
if (n < hexstring.size()){
result_str += hexstring[n];
}
}
是无限的。
要中断循环,您可以输入一个非数字,例如字母 'A'。
在循环之前你可以输出类似
的提示std::cout << "Enter a sequence of non-negative numbers. Press 'q' to quit.\n" ;