| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4000 人关注过本帖
标题:在if语句中使用scanf函数是否有特别需要注意的地方?
只看楼主 加入收藏
mahuaguan
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2011-9-13
结帖率:62.5%
收藏
已结贴  问题点数:20 回复次数:19 
在if语句中使用scanf函数是否有特别需要注意的地方?
#include<stdio.h>
#include<stdlib.h>
int main()
{

    char c;
    int num;
    int grade;
   
    printf("Enter 1 to letter or 2 to number: ");//判断将要输入的是字母还是数字
    scanf("%d",&grade);
   
    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;
}

不知为何,就是无法输入字母,求解答!
搜索更多相关主题的帖子: enter 
2011-09-28 16:23
mahuaguan
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2011-9-13
收藏
得分:0 
本人初学,希望不要取笑……
2011-09-28 16:25
wangjiada
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2011-9-28
收藏
得分:2 
在%c前面加一个空格就可以了、、具体什么原因不太清楚。期待共同探讨
2011-09-28 16:53
mahuaguan
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2011-9-13
收藏
得分:0 
回复 3楼 wangjiada
非常非常感谢你!
2011-09-28 17:04
hwf214685147
Rank: 2
等 级:论坛游民
帖 子:70
专家分:94
注 册:2011-9-14
收藏
得分:2 
这是scanf()函数本身的问题.你到网上找找这个函数使用需要注意的问题就行了,这里我就不多做解释了!网上更好的答案。
2011-09-28 17:07
cosam
Rank: 4
等 级:业余侠客
帖 子:146
专家分:259
注 册:2011-8-25
收藏
得分:2 
程序代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{

    char c;
    int num;
    int grade;
   
    printf("Enter 1 to letter or 2 to number: ");
    loop:scanf("%d",&grade);
    switch (grade)
    {
        case 1:
            printf("你选择的是数字模式!请输入你要的数: ");
            scanf("%d",&num);
            printf("你输入的数字是:%d\n",num);
            break;
        case 2:
            printf("你选择的是字符模式!请输入你要的数: ");
            scanf("%d",&num);
            printf("转化成字符是:%c\n",num);
            break;
        default:
            printf("请输入正确的值:");
            goto loop;
            break;

    }

        return 0;
}
这种根据有限数值的选择的问题,的最好用switch来做,而且要注意越界的问题,还有输入的是非数值的问题。
上面没有去注意输入的是字符,你可以想一下,输入字符时,上面会有问题。

[ 本帖最后由 cosam 于 2011-9-28 17:23 编辑 ]
2011-09-28 17:15
frz1991
Rank: 1
来 自:湖南
等 级:新手上路
帖 子:9
专家分:4
注 册:2011-7-24
收藏
得分:2 
注意格式什么的吧  我也不太懂
2011-09-28 18:07
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:2 
回复 楼主 mahuaguan
类型不符

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-09-28 18:23
mahuaguan
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2011-9-13
收藏
得分:0 
回复 8楼 A13433758072
可是我已经分别定义了整型和字符啊,不知哪里还有错误呢?请指出。
2011-09-28 21:59
赵灿星
Rank: 2
等 级:论坛游民
帖 子:11
专家分:14
注 册:2011-9-13
收藏
得分:2 
回复 楼主 mahuaguan
你在第一次输入后,输入缓冲区里残留了‘\n’回车符,所以当输入字符时自动将回车符读取,这就是为什么你输出总是ASC 10的原因。

解决这个问题,你就要在下次输入之前清空输入缓冲区:
在windows下就是fflush(stdin);
在linux下是setbuf(stdin, NULL);
问题解决!

下面的代码是对的:
程序代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{

    char c;
    int num;
    int grade;

    printf("Enter 1 to letter or 2 to number: ");//判断将要输入的是字母还是数字
    scanf("%d",&grade);
    /*  setbuf(stdin, NULL);//for linux  */
    fflush(stdin);//for windows
    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-28 22:13
快速回复:在if语句中使用scanf函数是否有特别需要注意的地方?
数据加载中...
 
   



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

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