用户输入指定格式的字符串
K i v
K是一个字符串
我是一个int
v是一个int
示例:" K 100 2"
char char_cmd = K
int a = 100
int 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的值没问题 当涉及到一个&amp; b它似乎没有复制用户输入的内容
我环顾四周,似乎白色空间是问题
我该怎么做才能做到这一点?
答案 0 :(得分:1)
解决方案:
弃掉
cin >> input;
sscanf(input.c_str(),"%s %d %d",&char_cmd,&a,&b);
并将其替换为
cin >> char_cmd >>a >> b;
为什么OP在这里不起作用:
问题1:
cin >> input;
只读取一个以空格分隔的标记。给定OP的样本输入,&#34; K 100 2&#34;,输入包含&#34; K&#34;。这就是全部。查看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
s,一个用于读取字符,一个用于null。未定义的行为结果。
因为指向char
数组的指针和指向char
的指针看起来完全相同,sscanf
无法检测到错误。实际上,因为sscanf
采用可变参数,它无法检测到很多错误。这是第一个不使用它的原因。
答案 1 :(得分:0)
char char_cmd;
int a;
int b;
char input[100];
cin.getline(input,sizeof(input));
sscanf(input,"%c %d %d",&char_cmd,&a,&b);