求大神帮忙看看这个代码
题目是:输入一个字符串,内有数字和非数字,如:asndjkas2121dnj12?dej,
将其中连续的数字作为一个整数,统计共有多少个整数,并输出这些数
请大家帮帮忙看看这个代码为什么运行起来会出错
#include<stdio.h>
void main()
{
void xuan(char*);
char str[80];
gets(str);
xuan(str);
}
void xuan(char*p)
{
int i=0,n,j=0,k=0;
char a[20][20];
for(;*p!='\0';p++)
{
if(*p>='0'&&*p<='9')
{
k=1;
a[i][j]=*p;
j++;
}
else k=0;
if(*(p-1)>='0'&&*(p-1)<='9'&&k==0)
{
i++;
}
}
printf("有%d个整数\n分别为:",i+1);
for(n=0;n<=i;n++)
{
for(j=0;a[n][j]!='\0';j++)
{
printf("%d",*(*(a+n)+j));
}
printf("\t");
}
}
[解决办法]
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
p=s;
while (1) {
k=sscanf(p,"%d%n",&v,&n);
printf("k,v,n=%d,%d,%d\n",k,v,n);
if (1==k) {
p+=n;
} else if (0==k) {
printf("skip char[%c]\n",p[0]);
p++;
} else {//EOF==k
break;
}
}
printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
[解决办法]
#include<stdio.h>
void xuan(char*);
int main(void)
{
char str[80];
fgets(str, sizeof(str), stdin);
xuan(str);
return 0;
}
void xuan(char*p)
{
int i=0,n,j=0,k=0;
char a[20][20];
//for (i = 0; i < 20; i++) //在这儿初始化,就不用在下面保存字符结束标识了
//{
//memset(a[i], 0, 20);
//}
for(; *p != '\0'; p++)
{
if(*p >= '0' && *p <= '9')
{
//k = 1;
a[i][j] = *p;
j++;
continue;
}
else
{
//if (k == 1)
//{
a[i][j] = 0; //字符结束标志
if (j != 0) //标识有数字
{
i++;
}
j = 0;
//}
//k = 0;
}
//if(*(p-1) >= '0' &&*(p-1) <= '9'&& k == 0)
//{
//i++;
//}
//j = 0;
}
printf("有%d个整数\n分别为:",i+1);
for(n = 0; n <= i; n++)
{
for(j = 0; a[n][j] != '\0'; j++)
{
printf("%c", *(*(a+n)+j));
}
printf("\t");
}
printf("\n");
}