我的功能还没有完全完成,但我要做的是:
- 读入一串由空格分隔的数字。
- 从该字符串中提取数字。
- 将它们转换为长整数。
返回读入的数字个数。
int input( int a, int b, long int *result_array ) { int ele = 0; char buffer[200]; char *start, *end; scanf("%[^\n]%*c", buffer ); start = buffer; while( ( end = ( strchr( start, ' ' ) ) != NULL ) ) { result_array = strtol( start, &end, 10 ); ele += 1; start = end + 1; } return ele; }
它似乎不能正常工作,我想我用错了 strchr。
最佳答案
strtol()
返回:
On success, the function returns the converted integral number as a long int value. If no valid conversion could be performed, a zero value is returned (0L).
你应该重新写你的代码:
end = buffer;
base = 10;
long int = li;
ele = 0;
while(li=strtol (end,&end, base)){
ele += 1;
}
return ele;
您不需要显式地使用 strstr()
来定位下一个整数。 strtol()
足够聪明,每次转换后它都会将终点定位到下一个 int。
我写了一个运行代码可能对你有帮助:
#include <stdio.h> /* printf */
#include <stdlib.h> /* strtol */
int main (){
char buffer[] = "2001 11 223 444 566";
char * end;
long int li;
end =buffer;
int base =10;
int ele = 0;
while(li=strtol (end, &end, base)){
printf("%ld \n", li);
ele += 1;
}
printf("\nNo of elements: %d", ele);
return 0;
}
它的输出:
2001
11
223
444
566
No of elements: 5
关于c - 使用 strchr 和 strtol 在一行中读取可变数量的 long int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15177994/