很抱歉这个简单的问题,但我正试图找到一种优雅的方法来避免我的程序看到像"14asdf"这样的输入并接受它为14.
if (sscanf(sInput, "%d", &iAssignmentMarks[0]) != 0)
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以防止sscanf将整数从那些错误的字符串中拉出来?
您不能直接停止sscanf()执行其设计和指定的操作。但是,您可以使用 的一个鲜为人知且很少使用的功能sscanf()来轻松发现问题:
int i;
if (sscanf(sInput, "%d%n", &iAssignmentMarks[0], &i) != 1)
...failed to recognize an integer...
else if (!isspace(sInput[i]) && sInput[i] != '\0')
...character after integer was not a space character (including newline) or EOS...
Run Code Online (Sandbox Code Playgroud)
该%n指令报告截至该点消耗的字符数,并且不计为一次转换(因此该格式只有一次转换)。这%n是自 C89 以来的标准sscanf()。
为了提取单个整数,您还可以小心地使用- (用它检测错误条件非常困难,但它比不报告或检测溢出strtol()要好)。sscanf()然而,这种技术可以以单一格式多次使用,这通常更方便。