萌新求助!!!C语言,全WA,找不到错误在哪里

P1320 压缩技术(续集版)

807677_zzxc @ 2022-10-23 22:37:04

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main() {
    int a[40000] = { 0 };//来保存点阵码
    int count = 0;//存个数
    int key = 0;//表示当前记0还是记1的个数
    int n;//记录点阵的N
    int i = 0;

    //实现对第一排的录入,break标志为读取到‘\n’
    while (1) {
        char p;
        p = getchar();
        if (p != '\n') {
            a[i] = p - '0';//将点阵值(0或1)录入到数组
            i++;//下一位
        }
        else {//读取到'\n'
            n = i;//记录点阵的N
            break;//跳出while
        }
    }

    //完成对剩下的点阵值的录入,结束标志是EOF
    for (i = n; i < n * n; ) {
        char p;
        if ((p = getchar()) == EOF) {
            break;
        }
        if (p != '\n') {
            a[i] = p - '0';//录入点阵值
            i++;//下一位
        }
    }
    printf("%d ", n);//打印点阵的N

    //从头遍历a数组,并计数0和1
    for (i = 0; i < n * n; i++) {
        if (key != a[i]) {//表示点阵值0、1的转变,将打印当前的计数,归零重新计数
            printf("%d ", count);
            key = a[i];
            count = 1;

        }
        else
            count++;//计数
    }
    //循环结束后还有最后一次的计数没有打印
    printf("%d", count);
    return 0;
}

by ud2_ @ 2022-10-23 22:44:17

又是回车受害者(

这题数据里的换行是 "\r\n" 而不是 "\n"


by 807677_zzxc @ 2022-10-23 22:51:31

@ud2_ 有点不是很明白,在对题目给的样例进行单步调试的时候读取到的是'\n',(\r\n不是两个字符了吗,O.o?)


by ud2_ @ 2022-10-23 22:59:46

@807677_zzxc 样例里确实是 "\n"(即使有 "\r" 也会被调试用的 Windows 机器去掉),但评测时输入的是 "\r\n" 两个字符。

判断各种换行的可靠方法之一是 isspace


by 807677_zzxc @ 2022-10-23 23:15:38

@ud2_ 感谢!!判断改成isspace后已经排除问题(。・∀・)ノ


|