admin 管理员组文章数量: 1086019
2024年4月24日发(作者:oracle创建表的sql语句)
维普资讯
是C语雷的“
四川绵阳职业技术学校
C语言是目前国际上广泛流行的一
种通用的结构化程序设计语言,它具有功
)
)
printf(“Result=%f”,x):
)
break;
"吗?
敏
还是在seanf()中连续输人数、字符串和字
符,也会出现上述现象。
如下列的一个简单程序:
#inelude"stdi0n
.
李
能丰富、表达能力强、使用灵活方便、应用
面广、目标程序效率高、可移植性好的特
点,不仅是开发系统软件和应用软件的理
}l’’
main()
想程序设计语言,而且国内许多考试中都
将C语言列入了考试范围。目前国内许多
高校开设了C语言课程,Turbo c2.0作为
C语言的入门编译系统,在当前的高校中
仍广泛应用。在Turbo c的上机中,学生遇
到了几处疑难情况,我让他们查阅了大量
的参考书,无结果,有的学生问:“这是不是
C语言的漏洞啊?”事实果真如此吗?
1 Scanf()和getchar()输入函数
在输入字符时的“漏洞”
在一本教科书上,给出了下列一个程
序:
#include"stdi0
h”
.
main()
I
char op;
lfoat X,y;
printf(“\ninput first data:”);
seanf(“%f”,&x);
while(1)
{
printf(“\ninput operator(+,一,
,
/,=):”);
0p=getehar();
if(op==’=’1
break;
prinff(“ninput nexI data:”);
scltnf(“%f’’,&y);
switch(op)
{
‘
case
+’:x+=y;
break;
’
+‘:x
case
一
=y;
break;
’
●’
case
:x●=y;
break;
case’/’:if(y)
x/=y;
本程序的目的是先输入一个实型数,
再输入一个操作符,后输入另一个实型数,
根据操作符的不同,分别执行不同的操作
(相加、相减、相乘、相除)后,输出结果。
本程序编译正确,运行时,屏幕提示及
输入如下:
input first data:12
input operator(+,一, ,/,=):+
input Next data:2…
input operator(+,一, ,/,=):=
Result=l2
再输入“一”运算符,也不能执干t,但输
入“ ”和“/”的运算符时,程序正常执行,
结果正确,换成seanf(),结果同样,为什
么?
我采用单步运行(F8键),在主菜单
Break/Watch中选择Add watch选项,输入
op、x、y观察。虽然C语言的输入函数执行
时是将当前键盘缓冲区里的字符读人的,
第一次将12后面的回车读人,第二次才取
输入的运算符,这时,“ ”、“/”、“=”能读
人,而“+”、“一”不读人,将其后面的回车
符读人,故不执行任何操作,为什么?
在op=getchar();的后面增加一句
op=getchar();整个程序完全正确,用户仍
然只输入一次(+、一、 、/)中的一个符
号,第一个getchax()语句将12后面的回车
符读人,第二个getchar()将所需的操作符
读人,整个程序完全正确。应该说,刚才的
程序中,只有一句op=getchar()“ …‘/”
“
+…‘
一
”都不能正确读人所需的操作符,
出现认“ ”“/”不认“+”“一”的这种怪现
象。一种可能是“瞎猫碰到死耗子”,偶然
的巧合,一种可能是C与Turbo C之间的
差异。
后来出现了多次类似的情况,即在输
入一个数或字符串后接着输入一个字符,
不论是ScaRf()语句后接着getchar()语句,
{
char p:
lfoat.x:
seanf(“%f%c”,&x,&p);
printf(“x=%f P=%c”,x,p):
)
这个程序在输人数和字符后,输出只
能显示 的值,P的值为回车符。将scanf
()改为scanf(“%f%c%c”,&x,&p,&p);
结果正确。
2 scarf()函数在结构体数组输入
实型成员值时的“漏洞”
有10个同学,分别有三门课的成绩.
要求计算每个同学的平均成绩和每门课的
平均成绩。定义了如下的一个结构体数
组,其输人数据部分的程序为:
#inelude“stdi0h’’
.
struet student
{
ehar nltme[20】;
lfoat score[3】;
)st[10】;
main()
{
int i,j;
f0r(i=0;i<l0;i++)
{
seanf(“%s”,st[i1.n.me);
lfor(j=0;j<3;j++)
se ̄f(“%f’’,&st[i】;sc0re[j】);
l
l
l
本程序编译无误,但运行时,程序不执
行score数据的读人,无法输入成绩。如果
将score的类型设为int型,程序运行正确,
为什么?
调试中发现:
维普资讯
山东东营胜利油田胜建集团 王新忠
Visual Foxpro6.0是美国Microsoft公司推出的数据库管理系 设计器中以expl1表示)。在设计分组报表时,自动生成的报表则
统。它集数据库创建、应用和程序开发于一体,并且其报表设计器
操作简单、功能强大,如能灵活运用,则对管理信息系统的开发有
着很大的帮助。
只能在报表的最下端起到汇总的作用,而不能实现对每一条输入
的料单数据的逐条累计。
报表的细节带区是报表显示的主要内容,如果能够在细节去
实现汇总,那么不就能实现每条记录的逐条累计了吗。按照这一
思路,我在页标头区加入结存金额字段,并在细节区加入矩形框,
1 报表设计器
使用报表设计器创建报表,一般有以下4个过程:
①启动“报表设计器”。
②定义报表布局:定义报表页面和报表带区的总体形状。
③设置数据环境:定义报表的数据源。
④添加报表控件:定义出限于页面的数据项。
其中,数据源既可以是数据表,也可以是视图,而且,以试图
作为数据源更能有效的加强报表设计器的功能。
以expl3表示(其表达式为exp9一expl1)。做好之后,点击:“预
览”,果然按照自己的想法实现了需要的功能。其结果如表1所示。
表1.器材名称(螺纹钢14#) 单位t 编码03001
料单 摘要
编号
收入
数量
收入
金额
发料 发料
数量 金额
结存
结果
结存
金额
1 239 3 964.80 1.239 3 964.80
在报表设计器中一般包括5个带区:
4—89 拌和站
721—1 拌和站
总和
0.012 98.40 1.227 3 926.40
0.100 320.00 1.127 3 606.40
l 239 3 964.80 0.1l2 358.40 1.127 3 606.40
①标题区:显示报表第一页的开头。
②页标头:显示每页的开头。
打印时却不止一行,而是打印所有符合要求的记录:
③细节:为报表的主要内容。在这里我们只能看到~行,但在
2.2 充分利用报表设计器的数据环境
在打印报表时,在最后一页往往出现打印不满的现象,虽然
不影响功能,但总显得不美观,格式不统一。为解决这个问题,可
以在数据环境中添加相应的代码。
④页注脚:打印在每页的底部,一般用于打印页号等内容。
⑤总结:主要用于分组汇总。
通常,我们所能做的调整工作有:调整带区宽度、移动控件和
修改控件等。
在本单位开发的劳资人员管理系统中,按要求每页打印23
条记录。但在最后一页中只有12条记录,剩下半页纸空白。为了
美观统一的要求,剩余的空白处要打印出相应的格式。此时可以
在报表设计器的数据环境中的Init事件中加入如下代码:
Public Pfintrownum
2 实际应用
2.1 灵活运用细节带区
本单位原先用VFP开发了一套材料管理系统,现在为适应财
务系统的要求,将增加材料明细账的功能,即对每一种材料的单
据除了有总的汇总外,还要实现逐条累计汇总的功能,以便于财
务对账。如果单独进行开发,则费时费力,而如果能巧妙的构造报
表,也能很好的解决这一问题。
Printrownum=23 &&需要打印的记录数
do while reccount( hmc.dbff)%Printrownum<>0
append blank
enddo
&&记录不满一页时添加空记录
在报表设计器中的数据源为料单明细视图,在该视图中以收 3 结束语
料数量 收料单价表示收料金额字段(在报表设计器中的矩形框
以exD9表示),发料数量 发料单价表示发料金额字段(在报表
廊 厣 崞厣 崞 崞 声 厣
本文只是介绍了VFP报表设计器的两个技巧应用,而其强大
的功能需要在使用过程中去仔细体会。
崞厣 。席 厨 席 厨 厨 厣 厣 崞
①结构体数组中,若其成员为float型
的简单变量,不是float型的数组,如下例:
【0].score[0],程序工作正常。
由此,我想是否结构体数组在输入内
st[i】.score[j卜temp;】
结果程序运行正确。
struct student
{
存中时,因其成员为float型数组,结构体
成员的float型数组首位置,其地址无法正
输入时的变量,然后将其值赋给st【i]
.score…,如下例:
c语言的格式输入的规定比较繁琐,
是最基本的操作,几乎每一个程序都包含
试程序的时间,我在此将自己的一点收获
奉献给大家,起个抛砖引玉的作用,希望得
数组下标变量无法定位,只能指向第一个 用得不对就得不到预期的结果,而输入又
char name[20】;
lfoat score;
l st[10】;
数据能正确输入。
确定位。我用一简单float型变量temp作 输入,有时由于掌握不好而浪费了大量调
②在输入时,如果指定输入值到&st [scanf(“%f’,&temp); 到各位同仁的斧正。
版权声明:本文标题:是C语言的“漏洞”吗? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713905124a657001.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论