黑马程序员技术交流社区

标题: 关于scanf函数的小问题 [打印本页]

作者: an1911    时间: 2014-5-12 23:14
标题: 关于scanf函数的小问题
请问
main()
{
int a;
float b;
float c;
scanf(“%2d%3P%4f’,&a,&b,&C);
printf(”\na=%d,b=%ec。%f\n”,a,b,C);
}
如果输入比较长的数字,如9876543210l,输出的结果是什么啊,最好有分析过程

作者: 宋城夏小雨    时间: 2014-5-13 00:32
首先,你的大小写和标点可能存在问题,如果我没有理解错,你的程序应该是:
main()
{
int a;
float b;
float c;
scanf(“%2d%3p%4f",&a,&b,&c);
printf(”\na=%d,b=%e,%f\n”,a,b,c);
}其次,scanf里面的数字表示的意思是将第1、2位存储到a,第3、4、5位存储到b,第6、7、8、9位存储到c,后面的数字或者字母无效。然后你看输出,第一个,98,没问题,第二个7.65e+2(即7.65*10的2次方),第三个4321.000000。
你可以参照一下scanf函数和printf函数的格式控制。地址在下面:
http://www.cplusplus.com/reference/cstdio/scanf/

http://www.cplusplus.com/reference/cstdio/printf/



作者: 詹绪长    时间: 2014-5-13 06:59
  1. int a;
  2.     float b;
  3.     float c;
  4.     scanf("%2d%3f%4f",&a,&b,&c);
  5.     printf("\na=%d,b=%e,c=%f\n",a ,b,c);
复制代码

代码里边很乱让人不舒服,拷贝过来全是报错,警告,就私自修改了一下。不知道跟你原意有没有出入。%3p实在搞不懂,b属于float类型,所以改为%3f.
注意一下格式:如果scanf中%d是连着写的如“%d%d%d”,在输入数据是,数据之间不可以加逗号,只能是空格或tab键或者回车键——“2 3 4”/“2(按tab)3(按tab)4(按tab)”。若是“%d,%d,%d”,则在输入数据时需要加“,”——“2,3,4”.
在"%"与各格式符之间加入一个整数,表示只可以读取操作中的最大位数。scanf("%2d",&a),这样的话即使你输入的是12345678,打印结果只是12.
把你说的98   765   43210l可以分为三段来看 ,根据打印类型来看输出的结果是a=98,b=7.650000e+02(%e这个是按10得n次方格式输出的),c=4321.000000。
希望可以帮到你:handshake

作者: an1911    时间: 2014-5-13 09:37
哦 谢谢,你们解答
作者: 吉大人    时间: 2014-5-13 10:08
二楼和三楼的解释的很清楚
作者: ★彬★卍囧神    时间: 2014-5-13 12:50
/*楼主我帮你把代码优化了下*/
/*请问如果输入比较长的数字,如9876543210l,输出的结果是什么啊,最好有分析过程*/
#include <stdio.h>
int main()
{
        int a;
        float b;
        float c;
        scanf("%2d %3P %4f",&a,&b,&c);   
        printf("\n a=%d,b=%e c=%f \n ", a, b, c);
}



作者: an1911    时间: 2014-5-13 19:34
詹绪长 发表于 2014-5-13 06:59
代码里边很乱让人不舒服,拷贝过来全是报错,警告,就私自修改了一下。不知道跟你原意有没有出入。%3p实在 ...

昨晚直接手写到文本中,没注意大小写,谢谢你的解答!
作者: an1911    时间: 2014-5-13 19:36
詹绪长 发表于 2014-5-13 06:59
代码里边很乱让人不舒服,拷贝过来全是报错,警告,就私自修改了一下。不知道跟你原意有没有出入。%3p实在 ...

恩。知道了。谢谢





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2