标题:新手求助
取消只看楼主
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
结帖率:96.43%
已结贴  问题点数:20 回复次数:2 
新手求助
题目:输入一个字符串,内有数字和非数字字符,例如:
        12sf s3df4s6@#$dsadd41dfsdf
      将其中连续的数字作为一个整数,依次存放到一数组a中。例如,12放在a[0],3放在a[1]......统计共有多少个整数,并输出这些数。
代码如下:
程序代码:
#include<stdio.h>
int tongji(char *,int *);
int main(void)
{
    char str[50]="\0";
    int a[50];
    int i,n;
    printf("输入一个字符串:");
    gets(str);
    n=tongji(str,a);
    printf("共计%d个数\n",n);
    for(i=0;i<n;i++)
        printf("%c%5d",i%5?'\0':'\n',a[i]);
    printf("\n");
    return 0;
}
int tongji(char *p,int *a)
{
    int i=0,j=0,t;
    while( *(p+i)!='\0' )
    {
        for( ; *(p+i)<'0' || *(p+i)>'9' ; i++ );
        if( *(p+i)=='\0' )
            break;
        for( t=0 ; *(p+i)>='0' && *(p+i)<='9' ; i++)
            t=t*10+*(p+i)-'0';
        *(a+j++)=t;
    }
    return j;
}


无错误提示。

运行结果如下:


搞不明白为什么会多出来几个数
搜索更多相关主题的帖子: int char printf for i++ 
2018-11-16 11:16
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
得分:0 
回复 2楼 rjsp
不是啊,我这是书上的一道题,原封不动抄上来的,至于50,由于题目并未交代字符串长度,我自己随便写的。

gets被废除这件事书中并未提及,我的书是谭浩强的《C语言程序》第三版,书中例子涉及字符串输入输出也是用的gets和puts。

for( ; *(p+i)<'0' || *(p+i)>'9' ; i++ );
------ 不考虑 *(p+i) == '\0' 的情况啦?
这个确实我没考虑到,以为最外层循环考虑就OK了。

------ *(p+i) 为什么不学正常人写成 p[i]?
自学C语言,刚学完指针,感觉指针不好理解,就强迫自己多用指针。

变量到处瞎放是什么意思,不是很清楚,还望大神指点。

const这东西不写主要是我不清楚为什么要写,个人感觉用不到啊
2018-11-16 14:25
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
得分:0 
回复 4楼 rjsp
看了你的回答甚是恐怖,谭浩强的这本书,是我们学校计算机专业的教科书,另外,老师给的编译器是VC6,理由是简单

另外,他的这本书,我已经快看完了,但是感觉基础还是不扎实,还望大神推荐一本C语言书,好让我正确学习C语言,感谢
还有,我在咱们这个网站上搜了下资源,全都是VC6,并未发现VC13以及更新的版本,还望大神提供资源,本人对于编程十分喜爱,望成全


[此贴子已经被作者于2018-11-16 17:39编辑过]

2018-11-16 17:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491316-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.169732 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved