搜索
查看: 2370|回复: 5
打印 上一主题 下一主题

scanf 时怎么样输入才是正确方式?

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-6 21:50:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
本帖最后由 AQSQ 于 2013-4-6 23:45 编辑

求解:
main()
{
    int a,b,c;
    printf("请输入三位数:\n");
    scanf("%d%d%d",&a,&b,&c);
        printf("a=%d b=%d c=%d",a,b,c);
}

输入方法应该是:1回车2回车3回车,显示结果。
不能用123回车。

而:

main(){
    float a,b;
    char c;
    printf("input expression: a+(-,*,/)b \n");
    scanf("%f%c%f",&a,&c,&b);
    switch(c){
       case '+': printf("%f\n",a+b);break;
       case '-': printf("%f\n",a-b);break;
       case '*': printf("%f\n",a*b);break;
       case '/': printf("%f\n",a/b);break;
       default: printf("input error\n");
    }
}

输入方法是:1+1回车,显示效果
不能用:1回车+回车1回车

求高手解答,什么原因导致2个题要不同的输入方式?
另外,如果第一个例题输入是一个非数字,显示的是:a=2130567168 c=4199280 b=4199382  又是什么原因呢?

最佳答案

查看完整内容

int a,b,c; printf("请输入三位数:\n"); scanf("%f%c%f",&a,&b,&c); 你的a b c都是int型,scanf读取的时候怎么是float和字符? 这种写法本来就是错误的,编译器会给出警告,下面会发生什么事情就很难预测了 而第二个 scanf("%f%c%f",&a,&c,&b); 你写的格式是,一个float紧邻着一个char,紧邻着一个float 那么输入就要遵循这个格式,而不能在float和char后面出现空白字符(C中的空白字符指空格,tab和回车) ...
沙发
发表于 2013-4-6 21:50:58 | 只看该作者
int a,b,c;
    printf("请输入三位数:\n");
    scanf("%f%c%f",&a,&b,&c);

你的a b c都是int型,scanf读取的时候怎么是float和字符?
这种写法本来就是错误的,编译器会给出警告,下面会发生什么事情就很难预测了

而第二个
scanf("%f%c%f",&a,&c,&b);
你写的格式是,一个float紧邻着一个char,紧邻着一个float
那么输入就要遵循这个格式,而不能在float和char后面出现空白字符(C中的空白字符指空格,tab和回车)

scanf太容易出问题了,在正式开发中是避免使用的
你可以看看
http://c-faq.com/stdio/scanfprobs.html
仅从设计上来说,怎么可能要求普通用户的输入符合一定格式
板凳
 楼主| 发表于 2013-4-6 23:50:25 | 只看该作者
rosynirvana 发表于 2013-4-6 22:30
int a,b,c;
    printf("请输入三位数:\n");
    scanf("%f%c%f",&a,&b,&c);

呵呵,我一开始是复制第二段上去修改的,开始没修改好就发帖了,更正了帖子了。

第二个例子有点理解了。
等继续学习,看看以后开发是用什么函数来代替scanf
地板
发表于 2013-4-7 02:02:20 | 只看该作者
AQSQ 发表于 2013-4-6 23:50
呵呵,我一开始是复制第二段上去修改的,开始没修改好就发帖了,更正了帖子了。

第二个例子有点理解了 ...

第一个类似的
你的格式字符串里面有空白,那么输入的时候也必须有空白的
不一定要空格对应空格,只要是若干个空白字符就行

一般建议是用fgets
如果你要输入数字再用atoi处理
5#
发表于 2013-4-7 15:55:59 | 只看该作者
用getchar()函数读取char型变量
6#
发表于 2013-4-7 18:50:31 | 只看该作者
No.1   scanf("%d%d%d",&a,&b,&c);用回车[Enter]键隔开输入的量。
No.2   scanf("%d %d %d",&a,&b,&c);用空格[space]隔开输入的量。
No.3   scanf("%d,%d,%d",&a,&b,&c);用逗号隔开输入的量。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表