我给assoc:45作为命令输入,我怎么只扫描其中的整数?
我在这里只看了几篇文章,但只谈到使用atoi,我知道我不能使用它
任何帮助表示感谢,谢谢
答案 0 :(得分:1)
使用strtok()
和atoi()
的组合(顺便说一句,都是“坏”函数;如果您认为自己的代码必须是strsep()
和strtol()
,请替换它们健壮)。
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
strtok(argv[1], ":"); // Find the colon
char *number = strtok(NULL, ":"); // Find the pointer to "after the colon"
int n = atoi(number); // Convert to an int
printf("%d\n", n);
return 0;
}
答案 1 :(得分:0)
您可以使用对预期输入的了解来获得一个指向数字第一位的指针。然后,您可以使用sscanf
。
char* arg = <the argument>;
char* cp = arg;
// Iterate over the string until you find a : followed by a digit.
while ( *cp != '\0' )
{
if ( *cp == ':' && isdigit(*(cp+1) )
{
++cp;
break;
}
++cp;
}
if ( *cp == '\0' )
{
// Deal with bad input.
}
else
{
int num;
int n = scanf(cp, "%d", &num);
if ( n != 1 )
{
// Deal with bad input
}
else
{
// Got the number. Use it.
}
}