| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4000 人关注过本帖
标题:在if语句中使用scanf函数是否有特别需要注意的地方?
只看楼主 加入收藏
mahuaguan
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2011-9-13
收藏
得分:0 
回复 10楼 赵灿星
明白了,谢谢!
2011-09-28 22:30
独孤无望
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2011-9-28
收藏
得分:2 
   c的格式一开始就定义的为符号型
2011-09-28 22:59
莫丶
Rank: 2
来 自:济南大学
等 级:论坛游民
帖 子:48
专家分:45
注 册:2011-1-2
收藏
得分:2 
10楼正解
scanf是从标准输入缓冲区中读取输入的数据,而%c的字符输入格式会接收回车字符,在输入第一个scanf时输入字符后按回车结束,输入缓冲中保存了这个回车符,遇到第二个scanf时,它自动把这个回车符赋给了c。而如果第二个scanf的输入格式不是%c时,由于格式不匹配,这个回车符会被自动忽略,所以只有在连续输入两个字符格式时才会出现这样的问题!

10楼是其中一种解决办法,也可以用switch等等
2011-09-28 23:40
shanshan3003
Rank: 2
等 级:论坛游民
帖 子:53
专家分:66
注 册:2011-8-29
收藏
得分:2 
c定义的是字符,为啥输入时用%d啊?
2011-09-29 02:27
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
回复 楼主 mahuaguan
输入时,多注意说明符和参数类型是否符合,scanf()后缓冲区会有残留数据,所以要清空缓冲区,其实这种问题,用swicth更直观点

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-09-29 07:06
平步青云
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2011-9-25
收藏
得分:2 
#include<stdio.h>
#include<stdlib.h>
int main()
{

    char c;
    char ch;
    int num;
    int grade;
   
    printf("Enter 1 to letter or 2 to number: ");//判断将要输入的是字母还是数字
    scanf("%d",&grade);
    while((ch = getchar()) != '\n')
              ;
   
    if (grade==2){
                  printf("Please enter the number: ");
                  
                  scanf("%d",&c);//读入一个数字
                  printf("%d's letter is %c\n",c,c);
                 }
    if (grade==1){
   
                  printf("Please enter the letter: ");
                  
                  scanf(" %c",&c);//读入一个字母
                  printf("%c's Asc is %d\n",c,c);
    }

    system("pause");
    return 0;
}
2011-09-29 07:40
mahuaguan
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2011-9-13
收藏
得分:0 
回复 15楼 A13433758072
我今天也学了switch,确实很好用耶!
2011-09-29 16:20
mahuaguan
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2011-9-13
收藏
得分:0 
回复 14楼 shanshan3003
因为用%d输出时它好像会默认输出该字符的Asc码
2011-09-29 16:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
switch其实是很不好用的东西,限制条件很多,将来你就知道了。

授人以渔,不授人以鱼。
2011-09-29 16:56
honey536
Rank: 2
来 自:山东
等 级:论坛游民
帖 子:68
专家分:76
注 册:2010-4-20
收藏
得分:2 
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int num;
    char c;
    int grade;
    printf("Enter 1 to letter or 2 to number: ");//判断将要输入的是字母还是数字
    scanf("%d",&grade);
 switch(grade)
 {
 case 1 : printf("Please enter the number: ");
           scanf("%d",&num);//读入一个数字
           printf("%d's letter is %d\n",num,num);
           break;
                  
 case 2 : printf("Please enter the letter: ");
          scanf("%c",&c);//读入一个字母
          printf("%c's Asc is %c\n",c,c);
          break;
 default :printf("输入错误!");         
 }
    system("pause");
    return 0;
}
2011-09-29 17:23
快速回复:在if语句中使用scanf函数是否有特别需要注意的地方?
数据加载中...
 
   



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

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