如何编写一个 C 程序来确定输入是否为质数和数字
How to write a C program that determines if input is prime and numeric
我正在尝试用 C 编写一个程序,要求输入一个数字,然后确定它是否是素数。如果输入是非数字字符或字符串,它会输出消息 INVALID INPUT。我设法创建了可以确定数字是否为质数以及是否为非数字的代码,但是当我尝试将它们组合在一起时,它不起作用。例如,如果我输入一个非数字值,它会输出正确的消息,但是当我输入一个数字值时,没有任何反应,我不确定为什么。有人可以帮忙吗?
#include <stdio.h>
#include <string.h>
#define FALSE 0
#define TRUE 1
int numeric( char *string )
{
int i, valid;
valid = TRUE;
if (string[i] < '0' || string[i] >'9')
valid = FALSE;
return valid;
}
void main()
{
char number[5];
printf("Please enter a decimal number>");
gets( number );
if (numeric(number) == TRUE)
{
int n, i, a = 0;
scanf_s("%d", &n);
for (i = 2; i <= n / 2; ++i)
{
if (n%i == 0)
{
a = 1;
break;
}
}
if (n == 1)
{
printf("1 isn't a prime number.");
}
else
{
if (a == 0)
printf("number entered is a prime number");
else
printf("number entered is not a prime number");
}
}
else
printf("INVALID INPUT \n");
}
除了@Michail 评论中提到的错误(未能在 numeric
中将 i
初始化为零:
您的问题是,在 if (numeric(number))
的真实分支中,您调用 scanf_s
,它将尝试从 STDIN
读取新的输入。您已经在拨打 gets
的电话中读取了来自 STDIN
的号码。您观察到的行为 ("nothing happens") 是意料之中的:您的程序正在等待您输入更多内容。
您让自己容易受到缓冲区溢出的影响,但这是一个单独的问题。
我正在尝试用 C 编写一个程序,要求输入一个数字,然后确定它是否是素数。如果输入是非数字字符或字符串,它会输出消息 INVALID INPUT。我设法创建了可以确定数字是否为质数以及是否为非数字的代码,但是当我尝试将它们组合在一起时,它不起作用。例如,如果我输入一个非数字值,它会输出正确的消息,但是当我输入一个数字值时,没有任何反应,我不确定为什么。有人可以帮忙吗?
#include <stdio.h>
#include <string.h>
#define FALSE 0
#define TRUE 1
int numeric( char *string )
{
int i, valid;
valid = TRUE;
if (string[i] < '0' || string[i] >'9')
valid = FALSE;
return valid;
}
void main()
{
char number[5];
printf("Please enter a decimal number>");
gets( number );
if (numeric(number) == TRUE)
{
int n, i, a = 0;
scanf_s("%d", &n);
for (i = 2; i <= n / 2; ++i)
{
if (n%i == 0)
{
a = 1;
break;
}
}
if (n == 1)
{
printf("1 isn't a prime number.");
}
else
{
if (a == 0)
printf("number entered is a prime number");
else
printf("number entered is not a prime number");
}
}
else
printf("INVALID INPUT \n");
}
除了@Michail 评论中提到的错误(未能在 numeric
中将 i
初始化为零:
您的问题是,在 if (numeric(number))
的真实分支中,您调用 scanf_s
,它将尝试从 STDIN
读取新的输入。您已经在拨打 gets
的电话中读取了来自 STDIN
的号码。您观察到的行为 ("nothing happens") 是意料之中的:您的程序正在等待您输入更多内容。
您让自己容易受到缓冲区溢出的影响,但这是一个单独的问题。