poj2159求助 关于字符串的输入问题

题目链接:http://poj.org/problem?id=2159
我的代码

#include <cstdio>
#include <cmath>
#include <cstring>
#include <iostream>
#include <algorithm> 
#include <string>
using namespace std;
int num1[27], num2[27];

char a[105], b[105];
int main()
{
    int lena, lenb, j = 0, k = 0, dai = 0, count = 0;
    //fgets(a, 100, stdin);
    //fgets(b, 100, stdin);
    scanf("%s%s",a,b);
    if (lena != lenb) { cout << "NO" << endl; return 0; }
    for (int i = 0; i < strlen(a); i++) {
        num1[a[i] - 'A']++;
        num2[b[i] - 'A']++;
    }
    sort(num1, num1 + 26);
    sort(num2, num2 + 26);
    for (int i = 0; i < 26; i++) {
        if (num1[i] != num2[i]) {
            printf("NO\n");
            return 0;
        }
    }
    printf("YES\n");
    return 0;
}

这个是可以AC的!但是如果把字符串a,b的读取方式换成被注释掉的fgets那种,就会wrong answer 请教一下这是为什么,难道以后没有空格回车的输入都要尽量用scanf来弄吗,我以前都是fgets没有出过问题

http://blog.csdn.net/lyy289065406/article/details/6642586