我在尝试弄清楚如何使用时遇到了很多问题scanf().它似乎与整数一致,相当直接scanf("%d", &i).
我遇到问题的地方是scanf()在循环中尝试读取输入.例如:
do {
printf("counter: %d: ", counter);
scanf("%c %c%d", &command, &prefix, &input);
} while (command != 'q');
Run Code Online (Sandbox Code Playgroud)
当我输入一个有效的结构化输入时c P101,它似乎再次循环,然后提示我.即使只有一个,这似乎也会发生:
scanf("%c", &c)
Run Code Online (Sandbox Code Playgroud)
在一个循环中.在再次提示我之前,它会进行两次循环.是什么让它循环两次,我该如何阻止它?
当我输入较少量的输入时,以编程方式不会有其他字符或数字,例如q,按Enter似乎提示我输入更多.如何scanf()处理单字符和双字符条目?
Rob*_*ble 20
当你输入" c P101"程序实际上收到" c P101\n".大多数转换说明符都跳过前导空格,包括换行符但%c不跳过.第一次\n读取所有内容直到读取" ",第二次读取"\n" command," c"读入prefix," P"留下不是数字,因此转换失败," P101\n"是留在溪边.下一次" P"被存储到命令中," 1"被存储到前缀中,并且1(从剩余的" 01")被存储到输入中," \n"仍然在流上以供下次使用.
类似的事情发生在第二种情况下,当你输入" q"时," q\n"输入到流中,第一次q读取" ",第二次\n读取" ",只有第三次调用是第二个" q"读取,您可以通过在格式字符串的开头添加空格字符来再次避免此问题.
更好的方法是使用类似fgets()的方法一次处理一行,然后使用sscanf()进行解析.