N
N
never_mind2015-10-01 13:37:14
C++ / C#
never_mind, 2015-10-01 13:37:14

Where did the Chinese characters come from in the output?

Учусь на первом курсе. На лабораторной работе столкнулся со следующей проблемой.
В задании надо было вывести в файл простые числа используя решето Эратосфена. При поиске простых чисел до "1009" всё работает хорошо. При "1010" и выше - выводит китайские иероглифы. С другой стороны, если поставить два пробела между выводимыми числами или пробел до выводимого числа, то всё работает. Можно выводить с переносом строки - тоже работает. Можете объяснить причину такого поведения?

#include <fstream>
#include <math.h>
using namespace std;
int main()
{
  ofstream fout;
  fout.open("test.txt");
  char msk[] = { 0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x1 };
  const int N = 1000; //в задании было до 100 000. начиная с 1010 появляются иероглифы в выводе
  char r[N / 8 + 1];
  for (int i = 1; i < (N / 8 + 1); ++i) //устанавливаем в 1 все биты
    r[i] = 0xff;
  r[0] = 0x3f; //первые два бита устанавливаем в 0. им соответствуют числа 0 и 1, которые нам неинтересны
  for (int i = 0; i <= sqrt(N); ++i) //самое большое разложение на простые - два корня. найдутся числа меньше или их нет
    if (r[i / 8] & msk[i % 8]) //если бит равен 1
      for (int j = i + i; j < N; j += i) //все кратные ему вычёркиваем
        r[j / 8] &= ~msk[j % 8];
  for (int i = 0; i < N; ++i)
    if (r[i / 8] & msk[i % 8])
      fout << i << " ";
  fout.close();
  return 0;
}

Answer the question

In order to leave comments, you need to log in

2 answer(s)
Антон Федорян, 2015-10-01
@AnnTHony

Как вариант, заменить символ-разделитель (добавить запятую):
Видимо пробелы после определенного символа воспринимаются как указатель на символы Юникода.
Кстати, это только для обычного Notepad-а, в любом другом редакторе корректно открывается.

W
whalemare, 2015-10-01
@whalemare

Еще вероятно: попробуйте изменить кодировку файла на UTF-8, если стоит не она

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question