C++ 将列和行中的素数打印到文件中
我创建了一个查找素数的函数,我需要帮助将这些数字写入一个格式良好的表(包含列和行)中的文件。我想我需要一些嵌套循环,但我不知道什么是最好的实现。这是我到目前为止的代码,希望你们能帮助我。谢谢 现在,我的代码所做的是将数字2和3写入文件,然后它进入一个由空行组成的无限循环 该文件应如下所示: 2 3 5 11 13 17 19 23 29 31 37 41 43 47 53 ... 一直到最接近4000的素数C++ 将列和行中的素数打印到文件中,c++,C++,我创建了一个查找素数的函数,我需要帮助将这些数字写入一个格式良好的表(包含列和行)中的文件。我想我需要一些嵌套循环,但我不知道什么是最好的实现。这是我到目前为止的代码,希望你们能帮助我。谢谢 现在,我的代码所做的是将数字2和3写入文件,然后它进入一个由空行组成的无限循环 该文件应如下所示: 2 3 5 11 13 17 19 23 29 31 37 41 43 47 53 ... 一直到最接近4000的素数 #include <iostream> #inc
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;
bool isPrime(int);
int main()
{
int counter = 0;
int currentNumber = 2;
ofstream outputFile("test.txt");
for (int i = 2; i < 4000; i++)
{
for (int row = 1; row < 4000; row++)
{
for (int col = 1; col <= 8; col++)
{
if (isPrime(i) == true)
{
outputFile << endl;
outputFile << setw(8);
outputFile << i;
outputFile << setw(10);
i++;
}
}
outputFile << endl;
}
}
system("pause");
return 0;
}
bool isPrime(int number)
{
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
return false;
}
}
return true;
}
你太接近了。只需数到8个素数并打印出新行,然后重置计数器直到下一个8。您已经在循环中以及for行中复制了i++代码,行和列的内容都是不必要的
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;
bool isPrime(int number)
{
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
return false;
}
}
return true;
}
int main()
{
int counter = 0;
ofstream outputFile("test.txt");
for (int i = 2; i < 4000; i++)
{
if (isPrime(i) == true)
{
outputFile << setw(8);
outputFile << i;
outputFile << setw(10);
counter++;
}
if (counter == 8)
{
outputFile << endl;
counter = 0;
}
}
return 0;
}
Richq已经为您提供了一种更好的实现方法,但让我们看看您在代码中犯了什么错误,看看您的意图,而不是它总是做什么: 你的外环从2到4000。然后为每个数字打印一个表。不是真的,因为你在表中也增加了i,但是让我们忽略它。这有点错误。你只需要一张桌子,所以外环必须走。保持整数i=2;不过 第二个循环:行从1到4000,每行打印8个素数。但您只需要小于4000的数字。显然,4000*8素数会更大。您不知道需要多少行表格。行的退出条件应为i<4000
第三个循环:col从1变为8。但也许在最后一行,我会在第三行超过4000。因此,如果i<4000是一个硬限制,而不是打印到行尾,即使您已经达到4000,那么您需要将其包括在条件中:col您有什么问题?告诉我们一些事情。没有人比你更了解这些问题。我不知道如何在一个文件的格式良好的表格中获得1-4000之间的所有素数。比如,我如何设置我的代码,让它每行打印8个素数,并一直打印到最后一个数字?不,我们想知道你给我们看的代码有什么问题。代码做了什么,不应该做什么,应该做什么?现在,它只写数字2和3,然后在一个无限的空行循环中运行。现在编辑你的OP并将其放入其中。您不会被否决太多。谢谢您的快速回答。第二个setw的目的是什么?我只是想将输出彼此分开,并将左边距分开。@初学者DEV AFAIK setw为下一个值输出预先设置宽度,但本身不打印任何空格。因此,在下一次迭代中,宽度10将被setw8覆盖。如果要在左侧强制使用空格,请使用std::right修改器将输出数据与用setw定义的字段的右端对齐,如:outputFile。这绝对有道理。
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;
bool isPrime(int);
int main()
{
int counter = 0;
int currentNumber = 2;
ofstream outputFile("test.txt");
int i = 2;
for (int row = 1; i < 4000; row++)
{
for (int col = 1; (col <= 8) && (i < 4000); i++)
{
if (isPrime(i) == true)
{
outputFile << setw(8);
outputFile << i;
outputFile << setw(10);
col++;
}
}
outputFile << endl;
}
return 0;
}
bool isPrime(int number)
{
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
return false;
}
}
return true;
}