论坛: 编程破解 标题: 一个有问题的c程序???各位进来帮忙看一下!! 复制本贴地址    
作者: lwei889 [lwei889]    论坛用户   登录
#define N 5
#include <stdio.h>
struct student
  {
  long num;
  char name[15];
  float score;
  }stu[N];
main()
{
  void print(struct student s[]);

  int i;

printf("\nplease input a record 'num,name and score':");
for(i=0;i<5;i++)
  scanf("%ld%s%f",&stu[i].num,stu[i].name,&stu[i].score);
print(stu);
}

void print(struct student s[])
{
int i;

for(i=0;i<5;i++)
  printf("%ld\t%s\t%.0f\n",s[i].num,s[i].name,s[i].score);

}


这个程序很简单,但就是在循环输入的情况下,老是有下面的错误信息
scanf : floating point formats not linked
Abnormal program termination
我曾在一本参考书上看到过,说这是tc内部本身的问题,在vc++6.0上调试
就能通过,我也试了,的确能通过!
我想问一下,这个错误的信息到底是什么原因造成,是 tc的问题 还是 程序存在
问题?????


地主 发表时间: 12/15 16:17

回复: 286 [unique]   版主   登录
scanf("%ld%s%f",&stu[i].num,stu[i].name,&stu[i].score);
改成:
scanf("%ld,%s,%f",&stu[i].num,stu[i].name,&stu[i].score);


B1层 发表时间: 12/15 16:36

回复: lwei889 [lwei889]   论坛用户   登录
按照你的改后,是可以了,但在输入时会有问题,就是
%ld,%s,%f    以逗号为分隔,但在输入字符也就是姓名时,会把‘,’(%s好象是以空格做结束标志的)当作一个字符而不是分隔符,这样后面的数据就会和名字合在一起。
当我输入 99101,lwei,80.3 时
输出结果:
99101    lwei,80.3      0

我试图把输入的顺序调整一下,但还是不行,当我在lwei后面输入空格再输入‘,’
只能输入一组数据,其他全  0  的信息 !!

能否详细解释一下吗??

B2层 发表时间: 12/15 17:05

回复: 286 [unique]   版主   登录
半角逗号.

B3层 发表时间: 12/15 17:32

回复: lwei889 [lwei889]   论坛用户   登录
  我用的tc是英文版的,是在dos状态下运行的,不能出现中文的,我不知道会不会有半角和全角之分,但还是不能正常运行
我真的很想知道这个问题的根源所在,我也知道我在这个论坛上不只一次的问问题,当然我对于别人的问题我要是知道的话,
我也会尽我最大的努力回答的,但我现在的知识太有限了,比起老大和各位斑竹来说,我可能比一粒沙子还要渺小,
所以我正在努力的学习。
我希望看到此贴的人给点详细的提示,也希望286再看到的话,能给点详细说明。
    谢谢拉!







[此贴被 子木(lwei889) 在 12月16日17时54分 编辑过]

B4层 发表时间: 12/16 17:34

回复: 286 [unique]   版主   登录
有人找我,没时间看你的贴子了.
下面可能对你有帮助,你再试试.
------------------------------------------------------------
Visual C++ 1.5 Turbo C 2.0
    windows 98
    近日遇到下面这个源程序, 编译无误,可运行总是出错。
    #include<stdio.h>
    #include<dos.h>
    void main()
    {
    char far *p;
    unsigned seg,off;
    p=MK_FP(0xb000,0x20);
    seg=FP_SEG(p);
    off=FP_OFF(p);
    printf("far p %fp,segment%04x,offset%0x\n",p,seg,off);
    }
   
    在MS visual C++ 1.5 下编译运行,则显示:
    run-time error R6002
    - floating-point support not loaded
   
    在Turbo C 2.0下编译运行,则显示:
    printf : floating point formats not linked
    Abnormal program termination
    是不是头文件少写了?或者设置不对?或者这个程序不能在Windows 9X下运行?请各位大侠指点,小弟谢了!

回答:

    这条错误信息的含义是没有链接浮点库。一般出现这条错误信息是因为在调用scanf、printf之前没有使用过浮点运算,解决的办法也很简单,随便给浮点数赋个值就行了。不过你的程序不是因为这个原因,你的程序就没有使用浮点型,而是printf的格式字符写错了。应该是%Fp,而不是%f。%Fp表示输出远指针,而&f表示输出浮点数。注意大小写。

此问题由李海回答。


B5层 发表时间: 12/16 18:18

回复: lwei889 [lwei889]   论坛用户   登录
#define N 5
#include <stdio.h>
struct student
  {
  long num;
  char name[15];
  float score;
  }stu[N];
main()
{
  void print(struct student s[]);

  int i;
  clrscr();
printf("\nplease input a record 'num,name and score':");
for(i=0;i<5;i++)
{
  printf("\ninput num:");
  scanf("%ld",&stu[i].num);
  printf("\ninput name:");
  scanf("%s",stu[i].name);
  printf("\ninput score:");
  scanf("%Fp",&stu[i].score);    /这行有改动/
}
print(stu);
getch();
}

void print(struct student s[])
{
int i;

for(i=0;i<5;i++)
  printf("%ld\t%s\t%f\n",s[i].num,s[i].name,s[i].score);

}

当我把程序改成这样时,输出s[i].score的值全是 0,其它正常


当我把这个程序再改一下时,程序就不能正常运行

#define N 5
#include <stdio.h>
struct student
  {
  long num;
  char name[15];
  float score;
  }stu[N];
main()
{
  void print(struct student s[]);

  int i;
  clrscr();
printf("\nplease input a record 'num,name and score':");
for(i=0;i<5;i++)
{
  printf("\ninput num:");
  scanf("%ld",&stu[i].num);
  printf("\ninput name:");
  scanf("%s",stu[i].name);
  printf("\ninput score:");
  scanf("%Fp",&stu[i].score);          /这行有改动/
}
print(stu);
getch();
}

void print(struct student s[])
{
int i;

for(i=0;i<5;i++)
  printf("%ld\t%s\t%Fp\n",s[i].num,s[i].name,s[i].score);  /%f--%Fp/

}



执行了以后结果我的c源程序变成了这样的:
Turbo C Configuration File  
                       
                            d  e   f  g  h  i  j  k   l  m  n   o  p  q   r  s   t  u  v  w   x  y   z  {   |  }  ~      �                            d                            ,D                                                                    -� E:\TC\INCLUDE                                                                                                                  .� E:\TC\LIB                                                                                                                      /P                                                                                0 32  1 25  2 100  3                                                                                                                                4 *                            5 *                            6 *                            7 *                            8 *                            9 *                            : *                            ; *                            < *                            =�                                                                                                                                > 8  ?P                                                                                @D E:\TC                                                              AP                                                                                �� 


[此贴被 子木(lwei889) 在 12月16日21时37分 编辑过]

B6层 发表时间: 12/16 21:43

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号