sscanf 格式参数不起作用
sscanf format parameter not working
用户输入指定格式的字符串
K i v
K 是一个字符串
我是整数
v 是一个整数
示例:"K 100 2">
字符char_cmd = K
整数 a = 100
整数 b = 2
cout << "Input your command to perfrom operation: " << endl
cin >> input;
sscanf(input.c_str(),"%s %d %d",&char_cmd,&a,&b);
我得到价值char_cmd没问题 当涉及到ints a&b时,它似乎没有复制用户输入的内容。
我环顾四周,似乎空白是问题所在
我能做些什么来实现这一点?
解决方案:
丢弃
cin >> input;
sscanf(input.c_str(),"%s %d %d",&char_cmd,&a,&b);
并将其替换为
cin >> char_cmd >>a >> b;
为什么OP在这里不起作用:
问题1:
cin >> input;
只读取一个空格分隔的标记。给定OP的样本输入"K 100 2",输入包含"K"。就这样。查看std::getline
一次阅读多个单词。
问题2:
在
sscanf(input.c_str(),"%s %d %d",&char_cmd,&a,&b);
sscanf
已被指示
%s
解析以空格分隔的字符串并将其存储在char_cmd
%d
解析有符号整数并将其存储在a
%d
解析有符号整数并将其存储在b
OP刚刚在他们的评论中澄清了char_cmd
是一个char
,而不是一个能够包含以空结尾的字符串的缓冲区。读取一个字符需要两个char
,一个用于读取的字符,一个用于空。未定义的行为结果。
由于指向char
数组的指针和指向char
的指针看起来完全相同,因此sscanf
无法检测到错误。实际上,因为sscanf
接受可变参数,所以它无法检测到很多错误。这就是不使用它的第一个原因。
char char_cmd;
int a;
int b;
char input[100];
cin.getline(input,sizeof(input));
sscanf(input,"%c %d %d",&char_cmd,&a,&b);
相关文章:
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- 我正在开发服务器,ip作为参数传递不起作用
- G++ C++17 类模板参数推导在非常特殊的情况下不起作用
- 类中的虚拟布尔函数参数不起作用
- 模板 ctor 类型推导不起作用(没有匹配的构造函数用于初始化 ...)与函数<>参数
- 我的代码在作为参数传入 .begin() 时不起作用,但在我将 .begin() 转换为迭代器后工作
- 为什么重载运算符>在参数声明 const 时不起作用?
- 为什么当我提供一些模板参数时,C++17 模板类推导不起作用?
- 为什么static_assert在带有 const 参数的成员函数中不起作用?
- ConvertToReferencePoint 方法不起作用,获取作业参数的 NULL (HyperV 2016)
- 线程函数参数的前向声明不起作用
- 模板参数类型推导在函数对象中不起作用
- 将参考类型作为嵌套模板结构中的模板参数作为模板参数不起作用
- 为什么参数推断在此模板模板参数中不起作用
- C++ 数组参数不起作用
- 带有 3 个参数的冲刺不起作用
- 模板参数在具有相同数据类型的单个类型名的构造函数中不起作用
- 像在 Python 中一样C++循环中的参数解析。为什么不起作用?
- C 类是功能不起作用的参数
- 为什么在参数输入之前将计算放置在代码中时,计算不起作用