【发布时间】:2020-12-18 22:04:37
【问题描述】:
我非常担心我不了解 C 编程的基本原理。我正在从文本文件中读取数字,我将检查它们是否是素数。然而,问题是IsPrime 函数永远不会被main 函数调用。我尝试将number 变量设置为全局变量和局部变量,但它不起作用。我的基本理解有那么差吗?
从文本文件中读取没有问题。它看起来像这样:
73771782 81296771 79982326 75332246 10128193
81643413 76259734 94432076 50063976 91748657
42311916 -1920042 90747362 53851612 43498487
73193311 96685173 39019033 8630045 17
因为main函数从不调用IsPrime函数,结果是所有数字都打印为is a prime number。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int isPrime(int number);
int main(int argc, char **argv) {
int number = 0;
int number2 = 0;
FILE *fp = NULL;
char file_name[] = "C:\\Users\\Erlen\\Desktop\\numbers.txt";
fp = fopen(file_name, "r");
if (fp == NULL) {
printf("Error opening the file: \n");
exit(0);
}
fscanf(fp, "%d", &number);
while (number != number2) {
if (isPrime(&number) == 1) {
printf("Number: %d is a prime number \n", number);
} else {
printf("The number %d is a prime number \n", number);
}
number2 = number;
fscanf(fp, "%d", &number);
}
printf("\n");
return 0;
}
int isPrime(int number) {
for (int i = 2; i < number; i++) {
if (number % i == 0) {
return 0;
}
}
return 1;
}
【问题讨论】:
-
1st)
isPrime(&number)==>isPrime(number)... 0th) 打开并注意编译器警告 -
你的两个分支打印是一个素数。但是你传入了 address,因此它不会改变。事实上,地址很可能不是可以被 4 或 8 整除的素数。
-
天啊,最后我有点累了。我已经对代码进行了很多更改,但我没有意识到 printf 具有相同的语句。另外,我完全忘记了 & 是用于寻址的。顺便说一句,17 应该是质数。