【发布时间】:2020-09-04 03:47:59
【问题描述】:
所以我已经解决了一个问题,我必须从输入文件中找到素数并将这些素数保存在名为 output.txt 的输出文件中。但是如果输入文件中没有素数,我'必须在输出文件中写“没有找到素数”。所以当我完成没有素数的代码时,它显示没有找到素数 5-6 次,我只希望它出现 1 次。我的错了吗?我完全是菜鸟
#include <stdio.h>
#include <stdlib.h>
int Primecheck(const int number);
int main()
{
FILE* Number,
* Prime_N;
int num;
char sentence[50] = "No prime numbers found";
int length = strlen(sentence);
int i;
Number = fopen("input.txt", "r");
Prime_N = fopen("output.txt", "w");
if (Number == NULL || Prime_N == NULL)
{
printf("Unable to open file.\n");
exit(EXIT_FAILURE);
}
printf("File opened and Reading Done \n\n");
while (fscanf(Number, "%d", &num) != -1)
{
if (Primecheck(num) == 1)
fprintf(Prime_N, "%d\n", num);
else
for (i = 0; i < length; i++)
{
fputc(sentence[i], Prime_N);
}
}
fclose(Number);
fclose(Prime_N);
printf("Overwrite Success.");
return 0;
}
int Primecheck(const int number)
{
int i;
if (number < 0)
return 0;
for (i = 2; i <= number / 2; i++)
{
if (number % i == 0)
{
return 0;
}
}
return 1;
}
【问题讨论】:
-
复习一下你的逻辑。这将清楚你错在哪里。或者使用调试器来单步调试程序。
-
如果你读到一个数字但它不是质数会发生什么?
-
不要在循环中写入该消息,而是在输出结果时设置一个标志。然后在循环之后,检查flag是否有结果,输出
fclose之前的消息。 -
将
sentence定义为char sentence[] = "No prime numbers found";。那么length将是sizeof sentence - 1。并将其存储为fprintf而不是循环和fputc。