C语言中关于简单代码的解释?

2020-04-22 科技 64阅读

#include  
struct sdut  
{  
    char s[22];  
}hang[21];  
int main()  
{  
    int m, n, i, j, x, a[21], b = 0;  
    //这里其实这么获取m和n有点问题(这里的问题是只代码逻辑的问题,而不是说语法错误)。原因下面说
scanf("%d%d", &m, &n);            
    //根据输入的m决定后面输入多少个字符串,但你用于存放字符串的数组只开了21个,
//如果你输入的m大于了21,那么你的后续输入是回导致数组越界的。
//对于n来说,也是同样的道理。
    for(i = 0; i <= m - 1; i++)  
    { 
//这里解释下为什么m-1对应了m行,注意是m行。
//原因是,数组下标是从0开始的,所以从0 ~ m-1 对应了m个数
//对应m行的原因是,每次循环是获取一行的输入
        scanf("%s", &hang[i].s);    //获取一个字符串的输入
    }
//该for循环用于遍历m个字符串
    for(i = 0; i <= m - 1; i++)  
    {  
        x = 0;
//该for循环用于遍历字符串中的每个字符,
        for(j = 0; j <= n - 1; j++)  
        {  
//判断输入的字符是否为 字符‘1’,注意,该字符对应的数字编码可不是1噢。
            if(hang[i].s[j] == '1')  
                x++;   //统计字符串中 字符‘1’的个数
        }  
//如果不是全‘1’,则记为0,否则记为1
        if(x != n)  
        {  
            a[i] = 0;  
        }  
        else  
        {  
            a[i] = 1;  
//用b记录全‘1’字符串的个数。
            b++;  
        }  
    }
//遍历记录到的所有全‘1’字符串
//说实话,这个for要干啥没看懂
    for(i = 0; i <= b - 1; i++)  
    {  
//打印n个0,并换行
        for(j = 0; j <= n - 1; j++)  
        {  
            if(j == n - 1)  
                printf("0\n");  //打印0,并换行。单纯的换行为:printf("\n");
            else  
                printf("0");  
        }  
    }  
//将输入的m个字符串中,不是全1的字符串,输出到屏幕
    for(i = 0; i <= m - 1; i++)  
    {  
        if(a[i] == 0)  
            puts(hang[i].s);  
    }  
    return 0;  
}
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com