《C程序设计语言》学习记录(未完结,不定时更新)

1. 不等号的优先级高于等号

若把 while ( (c = getchar ()) != EOF )

写成 while ( c = getchar () != EOF ),就相当于是这条语句:

while ( c = (getchar () != EOF) ) 意义完全不同

 

2. long 类型需要在使用printf函数时用%ld来说明。

 

3. getchar ()函数会把 换行 字符也读入缓存

 

#include <stdio.h>

main ()
{
        long nc = 0;

        while ( (c = getchar ()) !=EOF )
                        nc++;

        printf ("There's %ld characters.\n",nc);
}

 如果你输入了a,b,c三个字符,上面这段代码会输出一共输入了6个字符,原因就是每一次输入的换行符也被读入了

可以修改一下,把换行符去掉(getchar存储的是字符的ascii码,而换行符的ascii码为10,制表符是9,空格是32):

 

#include <stdio.h>

main ()
{
        long nc = 0;
        int c;

        while ( (c = getchar ()) !=EOF )
        {
                printf ("c is %d\n",c);
                if (c != 10)  /* or use: if ( c != '\n' ) */
                        nc++;
        }
        printf ("There's %ld characters.\n",nc);
}

 

另外,可以直接用scanf ()函数,scanf ()函数本身就不会读取末尾的换行。

 

 

4、gcc编译时报错误:`true' undeclared (first use in this function) 

在编译C语言时有时会遇到这样的错误提示:

`true' undeclared (first use in this function) or `false' undeclared (first use in this function)

就是说 bool, true, false 都是undeclared,原因很简单,因为真正的C中没有这些关键字,c和早期的c++里没有关键字bool,使用BOOL可以,但BOOL不是内置类型了,都是通过typedef或者宏来定义的,通常都会被定义成int类型。后来的c++出现了内置类型bool,值只能为true(1)和false(0)。

解决方法:

1、将文件名.c改为文件名.cpp,用C++方式编译则没问题

2、自己进行一个宏定义:

 

typedef enum __bool { false = 0, true = 1, } bool;

c90是没有bool的,因此支持c90的dev-c++当然也没有。想在c90里用bool,可以自行用宏进行定义。 

c99支持bool,用支持c99的编译器例如gcc就可以的。

 

参考:http://blog.sina.com.cn/s/blog_6a6094d501011g2h.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值