《C语言程序开发范例宝典》P311实例223快速分类
发表在C语言图书答疑 2011-04-22
是否精华
版块置顶:
源程序如下:
#include <ctype.h>
#include <stdio.h>
void main()
{
int i,comp1(),comp2();
clrscr();
printf("the original array is:\n");
for(i=0;i<10;i++)
printf("%10d",num[i]);
qsort(num,10,sizeof(int),comp1);
printf("\n the accending sorted array is:\n");
for(i=0;i<10;i++)
printf("%10d",num[i]);
printf("\n the decending aorted array is:\n");
for(i=0;i<10;i++)
printf("%10d",num[i]);
getch();
}
int comp1(int *i,int *j)
{
return *i-*j;
}
int comp2(int *i,int *j)
{
return *j-*i;
}
测试过程描述:
我在初次编译运行程序时发现可以正常运行,且结果和书上的一致。但是我发现num未定义且qsort函数是在头文件:stdlib.h中定义的,于是我稍作改动将ctype.h修改为stdlib.h,再次运行,TC即提示num未定义错误。我很纳闷,打开ctype.h头文件看后没有发现有num的定义,于是又将stdlib.h修改为ctype.h,结果不能通过编译,提示错误也是num未定义。
问题:请问为什么第一次能够通过编译?如果第一次的程序时正确的,那么为什么第二次不能够通过编译呢?期待您的回答,谢谢。
分享到:
精彩评论 2
蜡笔小新
学分:0 LV1
TA的每日心情
无聊
2023-02-13 19:27:34
2011-04-22
沙发
读者您好:
    编译器不同,所以有些函数的相应头文件也不同,因为不同的编译器遵循的C语言标准不同。所以您修改了头文件不一定是正确的,所以程序出错。
    至于您说为什么第一次能够通过编译正确,第二次不能通过,可能是您修改回来的头文件输入错误,或者您没进行重新的编译和运行,所以程序出错。
    至于确切的原因,因为我们并没有遇到过您所说的情况所以无法给你准确的答案。
    
jnez_darcy
学分:0 LV1
TA的每日心情
努力
2023-09-26 00:01:14
2011-04-22
板凳
我把ctype.h头文件的内容复制上来,麻烦您结合源程序再给看下,谢谢。
/*
begin:"ctype.h"
*/
/* ctype.h

Defines the ctype macros.

Copyright (c) Borland International 1987,1988
All Rights Reserved.
*/
#if __STDC__
#define _Cdecl
#else
#define _Cdecl cdecl
#endif

#define _IS_SP 1 /* is space */
#define _IS_DIG 2 /* is digit indicator */
#define _IS_UPP 4 /* is upper case */
#define _IS_LOW 8 /* is lower case */
#define _IS_HEX 16 /* [A-F or [a-f] */
#define _IS_CTL 32 /* Control */
#define _IS_PUN 64 /* punctuation */

extern char _Cdecl _ctype[];  /* Character type array */

#define isalnum(c) (_ctype[(c) + 1] & (_IS_DIG | _IS_UPP | _IS_LOW))
#define isalpha(c) (_ctype[(c) + 1] & (_IS_UPP | _IS_LOW))
#define isascii(c) ((unsigned)(c) < 128)
#define iscntrl(c) (_ctype[(c) + 1] & _IS_CTL)
#define isdigit(c) (_ctype[(c) + 1] & _IS_DIG)
#define isgraph(c) ((c) >= 0x21 && (c) <= 0x7e)
#define islower(c) (_ctype[(c) + 1] & _IS_LOW)
#define isprint(c) ((c) >= 0x20 && (c) <= 0x7e)
#define ispunct(c) (_ctype[(c) + 1] & _IS_PUN)
#define isspace(c) (_ctype[(c) + 1] & _IS_SP)
#define isupper(c) (_ctype[(c) + 1] & _IS_UPP)
#define isxdigit(c) (_ctype[(c) + 1] & (_IS_DIG | _IS_HEX))

#define _toupper(c) ((c) + 'A' - 'a')
#define _tolower(c) ((c) + 'a' - 'A')
#define toascii(c) ((c) & 0x7f)

int _Cdecl tolower(int ch);
int _Cdecl toupper(int ch);
/*
end:"ctype.h"
*/
上面的源程序是按照书上录入的,我认真检查了,没有问题。另外我的编译器的ctype.h头文件来看,也的确没有num数组的定义,只有"extern char _Cdecl _ctype[];  /* Character type array */"声明了外部字符数组。怎么想也不明白。
如果可能的话,请把你们通过测试用的编译器的ctype.h头文件粘出来下我试试。
烦劳您认真帮我看看,谢谢。
首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照