Answer the question
In order to leave comments, you need to log in
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
Как вариант, заменить символ-разделитель (добавить запятую):
Видимо пробелы после определенного символа воспринимаются как указатель на символы Юникода.
Кстати, это только для обычного Notepad-а, в любом другом редакторе корректно открывается.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question