所以我甚至解决了一个问题,我必须从输入文件中找到质数,并将这些质数保存在名为output.txt.But的输出文件中如果输入文件中没有质数,当我完成代码时,我必须在输出file.So中写入“没有找到质数”当没有质数时,它会显示5-6次没有找到质数,并且我只想让它出现1 time.What这是我的错误吗?我完全是个菜鸟
#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;
}发布于 2020-05-18 19:25:34
而不是
else
for(i=0;i<length;i++)
{
fputc(sentence[i] ,Prime_N);
}你可以直接写
else
printf("No prime numbers found");发布于 2020-05-18 19:31:24
好的,正如我从你的代码中看到的,每次你从文件中读取一个数字,你都会检查它是质数还是sentence数。所以你当然会得到多个输出,你应该将这个数字写入char*,然后检查在从Number中读取并检查素数后是否发生了变化,在循环之后将这个数字写在char*中,只要检查你存储素数的char*的长度,如果改变了,就写它,否则写你的句子…完成
像这样的东西
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
typedef struct {
char* data;
size_t size;
size_t capacity;
} string;
void init_string(string* s, size_t size){
s->data = (char*)malloc(sizeof(char) * size);
s->capacity = size;
s->size = 0;
}
void append(string* s,const char* str){
if(s->capacity - s->size < strlen(str)){
s->data = (char*)realloc(s->data, sizeof(char)* 4 * strlen(str));
}strcat(s->data, str);
}
void free_string(string* s){
free(s->data);
}
int is_odd(int n){
return n%2;
}
int main(){
int num[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
string str;
init_string(&str,1);
char* snum;
for(int i=0; i<18; i++){
if(!is_odd(i)){
sprintf(snum,"%d",num[i]);
append(&str, snum);
append(&str, "\n");
}
//printf(snum);
//strcat(str, snum);
}
printf("%s",str.data);
free_string(&str);
//printf(str);
return 0;
}https://stackoverflow.com/questions/61868014
复制相似问题