| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 624 人关注过本帖
标题:很基础的问题
只看楼主 加入收藏
维他命Q
Rank: 1
等 级:新手上路
帖 子:21
专家分:7
注 册:2012-1-12
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
很基础的问题
问题:用scanf输入一个东西,若输入的是字符串,输出“1”;若输入的是整形数字,输出“0”  
其实实际问题是:输入学生的学号或者姓名   ,查询某学生的成绩(成绩都是已知的)。。
 哪位大侠可以告诉我怎么些这个小程序。。想了很久,纠结那个scanf中的%s和%d不能同时辨别......
搜索更多相关主题的帖子: 东西 姓名 字符串 
2012-02-02 12:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我也很糾結,維他命到底到哪個字母了?

授人以渔,不授人以鱼。
2012-02-02 12:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
一切的輸入,其實全都是以字符串形式進入函數scanf(),輸出為什麼類型,是格式串中指定的。對輸入流"123",你需要它是字符串,就用%s,需要它是整數,就用%d,需要它是十六進制數字也可以。如果要避免出錯,就一律以%s格式接收到字符串中,再自己按需要判斷,比如需要整數,但收到"s123"或"12s3",此時不會觸發scanf()出錯,自己分析字符串的合法性比較穩妥。

授人以渔,不授人以鱼。
2012-02-02 12:19
爱德华
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:183
专家分:536
注 册:2011-5-29
收藏
得分:0 
呵呵,用指针加一个结构体变量操作。

算法,数据结构,windows核心编程.
2012-02-02 12:24
维他命Q
Rank: 1
等 级:新手上路
帖 子:21
专家分:7
注 册:2012-1-12
收藏
得分:0 
回复 2楼 TonyDeng
图片附件: 游客没有浏览图片的权限,请 登录注册


void main()
{char a[20]="678";
printf("%d",a);
}


输出结果是:1244980

出错额~~~~!!
2012-02-02 12:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
沒錯呀,字符串不是整數呀,你這裡printf()輸出的是字符串a的地址值。

sscanf(a, "%d", &i);
這樣得到的i=678

授人以渔,不授人以鱼。
2012-02-02 12:36
维他命Q
Rank: 1
等 级:新手上路
帖 子:21
专家分:7
注 册:2012-1-12
收藏
得分:0 
回复 6楼 TonyDeng
图片附件: 游客没有浏览图片的权限,请 登录注册


没学到这种书写形式。。。试了一下也不行
2012-02-02 12:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其實,你編程的邏輯應該知道自己當前在接收什麼數據才成。你是不是想輸入一個數據把它當學號或姓名辦都可以呀?那樣的話,你只能scanf("%s", s),然後看s[0]是不是數字字符,即isdigit(s[0])為真,是則可能輸入了學號,否則應該是姓名。這種設計必須假設沒有人的姓名會用數字開頭。

授人以渔,不授人以鱼。
2012-02-02 12:43
维他命Q
Rank: 1
等 级:新手上路
帖 子:21
专家分:7
注 册:2012-1-12
收藏
得分:0 
回复 8楼 TonyDeng
对,意思就是这样的
2012-02-02 12:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
char buffer[20];
scanf("%s", buffer);                            // 從鍵盤接收一個字符串
// 若用gets(buffer),則在此之前最好把buffer的前後空格全部刪掉,寫個trim()函數,scanf()讀入一個單詞,一定是沒有前後空格的,不需刪
if (strlen(buffer) > 0)                         // 讀入的不是空串
{
    if (isdigit(buffer[0])                      // 第一個字符是數字'0'-'9'
    {
        sscanf(buffer, "%d", &(st.id));        // 把buffer轉化為整數賦給學號,也可以用atoi()函數
    }
    else
    {
        sscanf(buffer, "%s", st.name);        // 把buffer賦給姓名,也可以用strcpy()函數
    }
}
上面的字符串分析,該怎麼做就自己怎麼做,靈活處理。

[ 本帖最后由 TonyDeng 于 2012-2-2 12:59 编辑 ]

授人以渔,不授人以鱼。
2012-02-02 12:50
快速回复:很基础的问题
数据加载中...
 
   



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

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