来自用户的样本输入:
A10
尝试阅读此输入
scanf_s("%c%d", &playerX, &playerY, 10);
来自用户的输入是否需要定界?是否可以像这样阅读?
编辑:我已经测试了它,它只是崩溃。
编辑2:解决方案:scanf_s(“%c%d”,&playerX,1,&playerY);
最佳答案
使用scanf_s
的解决方案很棘手:
char playerX;
int playerY;
if (scanf_s("%c%d", &playerX, (size_t)1, &playerY) == 2) {
/* input parsed correctly */
/* input stopped after the last digit in playerY */
/* You cannot limit the number of digits this way */
} else {
/* end of file or missing number */
/* input stopped before the offending character */
}
scanf_s
不能很好地解决scanf
的许多缺点。数组大小必须在c
,s
和[
格式的每个指针参数之后传递。但是,此大小必须作为rsize_t
传递,这与size_t
相同,但有最大值限制。传递1
是错误的,因为1
是int
,并且scanf_s
接受可变数量的参数,因此不会自动转换多余的参数。如果在int
和size_t
大小不同的体系结构上(例如64位窗口,Linux和OS / X),If将失败。您可以通过提高编译器的警告级别来避免类似的细微问题。
gcc -Wall -Werror
或clang -Wall -Werror
是一个好的开始。永远不要忽略这些有用的警告,如果您不理解它们,则可能不知道您的代码实际上是做什么的。除非您的编码规则或编译器强制使用
scanf_s
,否则使用scanf
更简单,并且对于这种格式也一样安全:if (scanf("%c%d", &playerX, &playerY) == 2) ...
关于c - 用scanf读取无限制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29477986/