c语言中遇到的问题

warning C4013: 'getch' undefined; assuming extern returning int或getchar 

2010-09-28 09:23:29|  分类:C语言 |  标签:|字号订阅

出现以上的错误或警告时,如果是在VC中编写的C程序,那么请将getch改为getchar~~~~

getch 用于整型,而getchar用于字符型。

再说一下getchar的作用:

scanf( "   %c ",&cr);
当输入字符按回车之后,那个回车符会遗留下来的,下一个scanf就会读不到下一个字符,只读到回车符!
比如:
      while   (score> 100   ||   score <0)
      {
            printf( "输入有错误,请重新输入:\n ");
            scanf( "%f ",&score);
      }
           
第二次循环的scanf读不到数据,所以在scanf前面加一个getchar();  
即:
      while   (score> 100   ||   score <0)
      {
            printf( "输入有错误,请重新输入:\n "); 
            getchar();   //过滤前面的回车键,否则下面的scanf读不到数据
            scanf( "%f ",&score);
      }

 

'exit' undefined; assuming extern returning int   这个警告

因为在stdio.h这个头文件里面没有包含exit()函数,exit()函数所在的头文件在stdlib.h和process.h中

c标准对头文件的解释:
标准头文件要有3点特征:
1)幂等性:多次包含和只包含一次没差别
2)相互独立性:标准头文件之间不可互相包含//说明楼上cpazstido是错的
3)文件级别:头文件要在全局作用域内被包含,在其他作用域内(例如函数块内)被包含行为未定义。

另外,c允许良性重定义。也就是重定义一个名字没有造成危害那么重定义不会导致编译出错或报警。

这就可以解释为什么两个头文件都有exit函数了。因为标准c要求c库实现exit函数,而最早标准c没有支持多线程,所以exit在stdlib.h中声明。后来多线程出现了,c为了支持多线程而出现了process.h,在其中自然而然要声明exit,两处声明完全相同,所以是良性重定义且符合c边准给头文件的限制。如果在stdlib.h中删除exit得声明那将导致许多现有的程序无法正确声明exit,这就是向后兼容性的考虑。

主要的错误在于NULL用于表示int类型的0
而char类型的0要用'\0'来表示。

 

因此getchar()具有吃掉前面回车键的作用!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值