• 徐洲更
    2020-01-09
    作业地址: https://github.com/xuzhougeng/learn-c-in-JKSJ/blob/master/jksj-c-03.c

    我今天写作业的时候,明明觉得自己的逻辑好像是对的,但是结果错了,应该如何debug呢? 特别是写了那么长的代码的时候。

    作者回复: 看到你的代码了,对于 switch...case 的整体结构理解很准确。debug 的话,可以尝试如下三种方式:
    1. 心算推理法,通过看代码找 bug,这个通常适用于经验丰富的老手。
    2. 关键步骤输出信息,在程序中,找到关键的位置,输出相关变量的值,通过程序输出找错误。
    3. 借助调试工具,IDE 一般都带有自己的单步调试工具,Linux 下面可以借助 gdb 进行调试。

    
     3
  • Paradise
    2020-01-13
    思路清晰,语言干练,通俗易懂,做了几年前端看老师的文章一样觉得很有收获!

    作者回复: d(^_^o)

    
     2
  • Geek_Andy_Lee00
    2020-01-13
    老师您好,我的没有输出。编译没有错误,也和老师的代码对比了,不知道哪里出错了,麻烦老师有时间帮忙看下,谢谢 代码如下:
    #include <stdio.h>

    int main() {
        int y, m, d, X;
        scanf("%d%d%d", y, m, d);
        scanf("%d", X);
        int i;
        for(i = 0; i < X; i++) {
            d += 1;
            switch (m) {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12: {
                    if (d > 31) d = 1, m += 1;
                    if (m == 13) m = 1, y += 1;    
             }; break;
                case 2: {
                    if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
                        if (d > 29) d = 1, m += 1;
                        if (m == 13) m = 1, y += 1;
                    }
                    else if (d > 28) {
                    d = 1, m += 1;
                 }
                } break;
                case 4:
                case 6:
                case 9:
                case 11: {
                    if (d > 30) d = 1, m += 1;
                    if (m == 13) m = 1, y += 1;
                } break;
            }
        }
        printf("%d%d%d", y, m, d);
        return 0;
    }
    展开

    作者回复: 读入的时候,变量前面需要加&符号

    
     1
  • 行问
    2020-01-09
    请教下,C 语言的编码规范有什么推荐的,专栏中的代码代码规范是如何进行的?

    作者回复: C语言的专门的编码规范在国内不太多,基本都是参考一些流行的C++的编码规范。

     1
     1
  • 凡眼看世界
    2020-02-05
    为什么我写出来的九九乘法表换行后,每一行各隔了5/4/3/2/1/0行?请老师帮忙指正

    #include<stdio.h>

    int main()
    {
        int a,b;
        for(b=1;b<=6;b++){
            
            for(a=1;a<=6;a++)
            if(a>b){
            printf("\n");
            }
            else printf("%d*%d=%d\t",a,b,a*b);
        }
    }
    展开

    作者回复: 看后面文章中我的参考答案。你的程序不管外层循环是多少,内层循环都执行6次,并且只要是不输出课件内容的时候,这6次你就输出换行,当然就会出现你所说的现象了。

    
    
  • sam
    2020-02-02
    #include <stdio.h>

    int main()
    {
        int y,m,d,x;
        scanf("%d%d%d", &y, &m, &d);
        scanf("%d", &x);
        
        for (int i = 0; i < x; i++)
        {
            d++;
            if ( 1 == m || 3 == m || 5 == m || 7 == m || 8 == m || 10 == m || 12 == m )
            {
                if ( 31 < d )
                {
                    m++;
                    d = 1;    
                }
                    
                if ( 13 == m )
                {
                    m = 1;
                    y++;
                }
            }
            else if ( 2 == m )
            {
                if ( ( y % 4 == 0 && y % 100 != 0 ) || y % 400 == 0 )
                {
                    if ( 29 < d )
                    {
                        m++;
                        d = 1;
                    }
                }
                else
                {
                    if ( 28 < d )
                    {
                        m++;
                        d = 1;
                    }
                }
            }
            else
            {
                if ( 30 < d )
                {
                    m++;
                    d = 1;    
                }
            }        
        }
        
        printf("%d%02d%02d\n", y, m, d);
        return 0;
    }
    展开

    作者回复: 正确,能改写成switch...case结构的程序就更好了!

    
    
  • rocedu
    2020-02-02
    还是从语法角度讲循环。我觉得可以从应用模式讲一下更好。循环应用有两类:
    1. 固定次数的
    2. 事件驱动的,会使用到条件语句

    这更体现编程不仅仅是语言。

    展开

    作者回复: 嗯,你说的这些内容,可以放到讲完循环基本语法以后的总结部分。d(^_^o)

    
    
我们在线,来聊聊吧