c语言问题,帮忙看一个程序,看错误出在什么地方,谢谢。 20

程序的功能是在输入的一个字符串中将连续的数字作为一个整数存放到一数组中,并输出,而且要统计有多少个整数,输出。我觉得下面的程序没有问题啊,怎么就得不出正确的结果呢???#... 程序的功能是在输入的一个字符串中将连续的数字作为一个整数存放到一数组中,并输出,而且要统计有多少个整数,输出。
我觉得下面的程序没有问题啊,怎么就得不出正确的结果呢???

#include <stdio.h>
#include <string.h>
void main()
{ char str[50],*pstr;
int num[10],*pn;
pn=num;
int i,number,k,kn,e,e10,digit;
i=0;k=0;digit=0;kn=0;
printf("Please input a string.\n");
gets(str);
pstr=str;
while(*(pstr+i)!='\0')
{ if((*(pstr+i)) >='0' && (*(pstr+i))<='9')
k++;
else
{ if(k>0)
{ number=*(pstr+i-1)-48;
kn=1;
while(kn<k)
{ e10=1;
for(e=1;e<=kn;e++)
e10=e10*10;
number=number+(*(pstr+i-1-kn)-48)*e10;
kn++;

}
}
*pn=number;
pn++;
digit++;
}
k=0;
i++;
}
printf("The string has %d numbers.\nThey are:\n",digit);
pn=num;
for(i=0;i<digit;i++)
printf("%d ",*(pn+i));
printf("\n");
展开
 我来答
k高人
2011-08-04 · TA获得超过700个赞
知道小有建树答主
回答量:561
采纳率:0%
帮助的人:169万
展开全部
#include <stdio.h>//没有注释的程序不是好程序,特别是用简单字母定义了一些变量,更需要注释
#include <string.h>//为了防止数组越界,请你测试时输入的数字少于10个
void main()
{
char str[50],*pstr;
int num[10]={0},*pn;//数组全部初始为0
// pn=num;//在定义变量之前不能执行任何操作,除非赋初值
int i,k,kn,e,e10,digit;
int c;//把数字字符转为一位整数
int nc=0;//整数个数统计,也作为num[]的下标
int flag=0;//0标记字符不是数字,1标记字符是数字
i=0;
k=0;//表示连续数字字符的位数
digit=0;
kn=0;
printf("Please input a string.\n");
gets(str);
pstr=str;
str[49]='\0';//防止越界
printf("有效字符串是: \n%s \n",str);//
while(*(pstr+i)!='\0')
{
if((*(pstr+i)) >='0' && (*(pstr+i))<='9')
{
flag=1;
c=*(pstr+i)-48;//发现数字,开始往num[nc]放值,
num[nc]=num[nc]*10+c;//每次扩大十倍再加上一个个位数
}
else
{//现在的字母不是数字
if(flag==1)//如果刚才是数字,那么说明一段连续的数字结束了,即已经取得一个整数
{
nc++;//下标后移
//在否则,就只是一般字符了,不需要处理
flag=0;//标记为非数字
}
}
i++;///////////////////不要忘记
}//最终回得到nc个整数,
if((*(pstr+i-1)) >='0' && (*(pstr+i-1))<='9')
nc++;//注意,如果字符串的最后是数字,然后是'\0';
//那么上面的nc++执行不了(因为while()),所以这里补上

printf("The string has %d numbers.\nThey are:\n",nc);
pn=num;
for(i=0;i<nc;i++)
printf("%d ",*(pn+i));
printf("\n");
}
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机汇编程序是用汇编语言编写的程序,用于控制单片机的操作。汇编语言是一种比较接近计算机硬件语言的低级语言,相对于高级语言来说更容易理解和实现。下面是单片机汇编程序的基本步骤:1. 将代码和数据汇编到规定的段中。2. 在存储器中用未初始化的... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
chu雄
2011-08-04
知道答主
回答量:53
采纳率:0%
帮助的人:22.6万
展开全部
朋友你那个程序我看了好久,就没怎么在你上面改了。我给你写了个,测试了几组数据都没什么问题。我是没有用指针的,程序如下:
#include <stdio.h>
#include <string.h>
void main()
{
char str[50];
int num[10];
int i,number=0,k=0,j=0;
printf("Please input a string.\n");
gets(str);
k=strlen(str);//这是求出字符串的长度;
for(i=0;i<k;i++)
{
if(str[i]>='0'&&str[i]<='9')
number=number*10+str[i]-'0';//把数的字符转换成数;
else if(number!=0)
{
num[j++]=number; //把数放到数组中去;
number=0;
}
}
if(str[k-1]>='0'&&str[k-1]<='9')//如果最后是数字字符,就要考虑特殊处理;
num[j++]=number;
printf("The string has %d numbers.\nThey are:\n",j);
for(i=0;i<j;i++)
printf("%d ",num[i]);
printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
maihx
2011-08-04 · TA获得超过210个赞
知道小有建树答主
回答量:99
采纳率:0%
帮助的人:133万
展开全部
程序定义了不少无意义的变量,读起来也费解。
举个例子吧,当输入mai123456时,执行第一次循环时,由于*(pstr+i)!='\0'而执行else部分,又由于此时k还为0,而执行if语句之后*pn=number;,number并未被初始化,就被放入num数组中了。
先找个例子试着在纸上逐步运行你的程序吧,也有助于你发现错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
前今歌095
2011-08-04 · TA获得超过181个赞
知道小有建树答主
回答量:328
采纳率:0%
帮助的人:249万
展开全部
写程序要注释!!!你的程序看的头痛,我就在你的基础上改了,程序源代码要的是可读性,你这根本就没有,具体解决过程 你自己对照你的看看吧我修改的基本的都给了注释

int swap(char c)
{
switch(c)
{
case '0':
return 0;
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
}
}

//以下代码加在main

char str[50],*pstr;
int num[10],*pn;
int i,k,kn,digit;
i=0;k=0;digit=0;//kn=0;
printf("Please input a string.\n");
gets(str);
pstr=str;
while(*(pstr+i)!='\0')
{
if((*(pstr+i)) >='0' && (*(pstr+i))<='9')
{
*(num+k) = swap(*(pstr+i));//对NUM进行赋值 需要转换
k++;//数字的POS
digit++;//计数器
}
/*这里实在是没有必要
else
{

if(k>0)
{ number=*(pstr+i-1)-48;
kn=1;
while(kn<k)
{ e10=1;
for(e=1;e<=kn;e++)
e10=e10*10;
number=number+(*(pstr+i-1-kn)-48)*e10;
kn++;

}
}
*pn=number;
pn++;

}
*/

i++;
}
printf("The string has %d numbers.\nThey are:\n",digit);
pn=num;
for(i=0;i<digit;i++)
printf("%d ",*(pn+i));
printf("\n");
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_over_there_
2011-08-04 · 超过15用户采纳过TA的回答
知道答主
回答量:60
采纳率:0%
帮助的人:51.3万
展开全部
k=0; i++;
k不应该在执行每次循环后就清零吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式