可能是字符串::size_type类型
Could it be the string::size_type type?
这个C++代码可能有什么问题,有时它会正确运行,但很多时候它不会给我任何结果?我不能准确地指出问题的来源,但我认为有一些非法的表达式正在产生未定义的结果。顺便说一句,我在android上使用C4Droid,我认为它几乎支持所有C++11功能,而且在这个特定的代码中没有C++11表达式。或者可能是编译器?
# include <iostream>
# include <string>
using namespace std;
int main ()
{
const string hexdigits = "0123456789ABCDEF"; // possible hex digits
cout<< "Enter a series of numbers between 0 and 15"
<< " separated by spaces. Hit ENTER when finished: "
<< endl;
string result; // will hold the resulting hexify'd string
string::size_type n; // hold numbers from the input
while (cin >> n)
if (n < hexdigits.size()) // only accept invalid input
result += hexdigits[n]; // fetch the indicated hex digit
cout << "Your hex number is: " << result << endl;
}
输入:11 15 7 8
如果您提供了有效的输入,然后按Enter,程序仍在等待更多的输入。
cin >> n
跳过前导空白,然后读取一个整数值。'n'
(回车键)是空白。您需要触发和文件结束条件来终止循环:对于Unix/Linux,Ctrl-D;对于Windows,Ctrl-Z。
或者从另一个来源向程序输入:
echo 11 15 7 8 | the_program
在类似UNIX的系统上,如果程序正在从键盘读取输入,则可以通过在一行的开头键入Ctrl.D或在一行中间键入Ctrl-D两次来触发文件结尾条件。
根据cppreference,operator>>
的行为方式如下:
9) 表现为未格式化的输入函数。在建造和检查哨兵对象,从输入流中提取所有数据并将其存储给某人。如果出现以下情况之一,提取将停止满足条件:
- 文件结尾出现在输入序列上
- 在输出序列中插入失败(在这种情况下,不提取要插入的字符)
- 发生异常(在这种情况下,捕获异常,并且只启用故障位上的重新抛出异常)
如果启用了std::skipws
,提取将丢弃空白字符(包括换行符),因此,ENTER不会像提示所暗示的那样终止循环。
正如Tony D.在评论中所建议的那样,您可以使用std::getline
提取分隔符(默认情况下为换行符)。你的程序可能看起来像这样:
std::string line;
std::getline(std::cin, line);
std::istringstream iss(line);
while (iss >> n)
{
if (n < hexdigits.size()) // only accept valid input
result += hexdigits[n]; // fetch the indicated hex digit
}
std::cout << "Your hex number is: " << result << std::endl;
Ctrl+D有效。我想我需要的是文件的末尾。尽管我必须按两次Ctrl+D才能工作。不知道为什么。
相关文章:
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- 在"结构提升::enable_if<提升::is_pod<T>,无效>"中没有名为"type"的类型
- C++ "错误:在'类 std::result_of< ... >"中没有名为'type'的类型"
- Cython:如何从C级类型获取'actual Python type'(类型代码/dtype)
- 作为模板类型参数,为什么 type[N] 与其专用版本不匹配----模板<类 T>类 S<T[]>
- Clang 对使用的类型别名发出"unused type alias"警告
- 检测<T>某些非数字类型 T 的 std::numeric::type 的特化
- 不同指针类型之间的无效比较:'type*' 和 'type&(*)()'
- 按参数类型更改"return type template"
- 在shared_from_this()中的错误类型(在继承类中)(是否有dyn.type-ware shared Poi
- grpc & protobuf -- 错误:std::result_of<> 中没有名为 'type' 的类型
- 类 std::result 中没有名为 "type" 的类型
- 访问基类型数组成员(Int-to-type习惯用法)
- 类类型的"Incomplete type isn't allowed"数组
- `type'和`const type'的类型特征
- 我是否可以保证SizeOf(type)== sizeof(无符号类型)
- 编译错误C++与上面定义的发生错误的类型"does not name a type"?
- 仅当我提供类型检查规则时才"No type checking rule"错误
- reinterpret_cast<类型ID>"type-id"可以是变量吗?