看到这个main
:
int main(void)
{
int i;
int ch;
char str[512];
fgets(str, sizeof str, stdin);
for (i = 0; i <= (strlen(str)); i++)
{
if (str[i] != '\0' && str[i] != '\n')
{
int num = atoi(&str[i]);
printf("%d\n", num);
}
}
return 0;
}
我想从用户那里获取数字并获取所有没有任何数字的数字spaces
or tabs
.
例如:
输入1 2 3
。
但在这种情况下,输出是:
1
2
2
3
3
那么为什么我收到2
and 3
twice?
我会这样做:
char line[256];
if (fgets(line, sizeof line, stdin) != NULL)
{
const char *ptr = line;
while (*ptr != '\0')
{
char *eptr = NULL;
const long value = strtol(ptr, &eptr, 10);
if (eptr != ptr)
printf("%ld\n", value);
else
break;
ptr = eptr;
}
}
这使用strtol()所以它也可以处理负数;如果这是不正确的,您当然可以添加检查以将其过滤掉。我认为这比使用任何东西都要好得多strtok()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)