C语言初学习——易错点合集(持续更新中)

转义字符

例题一

复制代码
int main()
{
    char s[] = "012xy\08s34f4w2";
    int i, n = 0;
    for (i = 0; s[i] != 0; i++)
    {
        if (s[i] >= '0' && s[i] <= '9')
        {
            n++;
        }
    }
    printf("n=%d\n", n);
}

输出:


n=3


例题二

复制代码
int main()
{
    char s[] = "\01234";
    for (int i = 0; s[i]; i++)
    {
        printf("1");
        printf("%c\n", s[i]);
    }
}

输出:


1

13

14


总结:

八进制值的判断取决于后续是否为合法的八进制。

以\开始,最少1位,最多3位,且必须是合法的8进制数字,即0~7,如"\012"。

例:在"\08"中,'\0'为结束符。

自增与自减

例题一

复制代码
int main()
{
    int k = 5;
    while (k--)
    {
        printf("%d", k -= 3);
    }
}

输出:


死循环


总结:

自增与自减的先运算再赋值也同样应用在循环体里

例题二

复制代码
int main()
{
    int a = 0;
    printf("%d %d %d %d", ++a, a, a++, ++a, a);
}

输出:


3 3 1 3


总结:

在C语言中有个很常用的函数printf,使用时从右向左压栈,依次从右向左开始计算,计算完后才会往%d中输出,因为有多条赋值语句,所以它是个累加过程,直到压栈结束后输出最终得累加值,而遇到a++这种先使用在变化的量则优先输出。
参考:

相关推荐
一抹晴空43 分钟前
Keil MDK AC6 compiler编译报错,与AC5区别
c语言·arm开发·单片机
czhaii2 小时前
单片机伺服电机加减速控制子程序
c语言·单片机
qq_333120973 小时前
C++高并发内存池的整体设计和实现思路_C 语言
java·c语言·c++
luj_17683 小时前
残熵算法的稳健防灾逻辑
c语言·开发语言·c++·经验分享·算法
QiLinkOS4 小时前
从技术到资产的跃迁:企业专利布局的深层逻辑
c语言·数据结构·c++·单片机·嵌入式硬件·算法·开源
山上三树5 小时前
C/C++ 高频报错速查表(开发通用版)
c语言·开发语言·c++
神仙别闹5 小时前
基于C语言 实现 Windows PE 文件解析
c语言·windows·microsoft
LDR0066 小时前
LDR6020:多 Type‑C 端口角色管理与外设上电顺序的智慧核心
c语言·开发语言·云计算
東隅已逝,桑榆非晚7 小时前
新手入门指南:认识 C 语言文件操作(上)
c语言·开发语言·笔记
社交怪人8 小时前
【A×B】信息学奥赛一本通C语言解法(题号1036)
c语言