| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 873 人关注过本帖
标题:关于初学C的 小问题
只看楼主 加入收藏
labuboco
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-3-6
结帖率:0
收藏
已结贴  问题点数:20 回复次数:8 
关于初学C的 小问题
图片附件: 游客没有浏览图片的权限,请 登录注册
谁能说一下步骤 尤其是那个sign是什么用处 还有程序运行的顺序
2016-03-06 23:50
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:10 
程序代码:
int  atoi(char s[])
{
    int i,n,sign;
    
    for(i=0;isspace(s[i]));i++)  ;  //跳过开头的空白,i到达第一个字符位置,如无空白也适用
    
    sign=(s[i]=='-')?-1:1;          //第一个字符处判断正负数
    
    if(s[i]=='+'||s[i]=='-')  i++;  //若开头有+-号标记,i指向下一个字符
    
    for(n=0;isdigit(s[i]);i++)
        n=10*n+(s[i]-'0');          //获取数字直到非数字字符处停止(例如,"12345dhf44889"返回的只能是12345),s[i]-'0'表示将一个数字字符变成数字
    
    return sign*n;                  //加上正负号并返回数字
}


[此贴子已经被作者于2016-3-7 08:16编辑过]


   唯实惟新 至诚致志
2016-03-07 08:13
labuboco
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-3-6
收藏
得分:0 
回复 2楼 qq1023569223
1234567djfkggkgk34567
只能返回前面的数字?
那如果是-1 -2 -3 -5djfkf
也只能判断第一个正负号
那这个程序的意义到底是什么?
一点不准确呀,后面的判断不到!
2016-03-07 09:48
labuboco
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-3-6
收藏
得分:0 
这个for if for的循环顺序好像不能逆向返回前面?
2016-03-07 09:50
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
回复 3楼 labuboco
有的事情并不能真正做到面面俱到,凡事不可强求。

   唯实惟新 至诚致志
2016-03-07 09:57
labuboco
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-3-6
收藏
得分:0 
回复 5楼 qq1023569223
那这个函数的实际作用是?
2016-03-07 11:33
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:10 
回复 3楼 labuboco
那这个代码应该可以满足你的要求:
程序代码:
#include <stdio.h>
int isnum(char a){return a>='0'&&a<='9'?1:0;}
void main()
{
    int i,j,f;
    char a[]="123-456fsdf+-6+7gsdw-6";
    i=j=f=0;
    do
    {
        if(isnum(a[i]))
        {
            if(!f)f=1;
            if(f)j=j*10+a[i]-'0';
        }
        else
        {
            if(f)printf("%d,",j*f);
            j=f=0;
            if(a[i]=='+'&&isnum(a[i+1]))f=1;
            if(a[i]=='-'&&isnum(a[i+1]))f=-1;
        }
    }while(a[i++]);
    printf("\n%s\n",a);
}

能编个毛线衣吗?
2016-03-07 13:12
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
回复 6楼 labuboco
功能已经说过了,字符串有无数种格式,你能写得全所有吗?

   唯实惟新 至诚致志
2016-03-07 13:17
labuboco
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-3-6
收藏
得分:0 
回复 7楼 wmf2014
谢谢!
2016-03-07 13:41
快速回复:关于初学C的 小问题
数据加载中...
 
   



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

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