【C】将m~n之间的素数输出与VS2005以上版本对C语言的scanf的警告warning C4996

素数也叫质数,就是在大于1的自然数中,除了1和此整数自身外,不能被其他不包括0的自然数所整除的数,

需要注意的是,判断一个自然数n是否为质数,无须从1-n检验是否都能与此数整数,只需要用少于等于根号n的所有素数与此数试除即可,这样,每个数的检验的时间复杂度,足足减少了一半。

C语言的实现代码如下:

#include<stdio.h>
#include<math.h>
void main(){
	int m,n;
	printf("输出从m到n的素数:\n");
	printf("m=");
	scanf("%d",&m);
	printf("n=");
	scanf("%d",&n);

	for(int i=m;i<=n;i++){
		int flag=1;//使用flag来控制这个素数是否输出而不是直接pass掉这个素数
		for(int j=2;j<=sqrt(float(i));j++){
			if((i%j)==0){
				flag=0;
				break;
			}
		}
		if(flag){
			printf("%d,",i);
		}
	}
}

运行结果如下:

如果在VS2005以上的版本可能会出现scanf的警告,warning C4996: ‘scanf‘: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details

在Windows环境下,不推荐用ANSI字符串类型,已经废止printf()系列函数,改用后面带_s的函数形式,采用unicode字符串。用scanf()函数接收的字符串,将有可能出错,ANSI是用0结束的字符串,但unicode字符串有些字符的第二位是0,这样scanf()就只收到0之前的那一串代码。现在的Windows,内部全部使用unicode字符串进行处理,如果你的程序强行采用ANSI字符串形式,则Windows会多做一个动作,将这些字符串转换为unicode码,在返还给你的程序时,若用printf(),又要再转回ANSI码。新型的C编译程序给出这个警告,是有道理的。一般警告类信息,可以不理睬而强行编译,也能通过,但不保证执行正常。

ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内在泄露。所以vc++2005/2008中提供了scanf_s(),在调用时,必须提供一个数字以表明最多读取多少位字符。

这是ide的安全检查,和c语言本身没关系。scanf_s()的使用如下:

#include <stdio.h>
#include <stdafx.h>

int main()
{
	int a,b,sum;
	printf("请输入两个整数\n");
	scanf_s("%d,%d",&a,1,&b,1);
	sum=a+b;
	printf("%d",sum);
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-29 19:09:48

【C】将m~n之间的素数输出与VS2005以上版本对C语言的scanf的警告warning C4996的相关文章

【c语言】将100~200之间的素数输出

// 将100~200之间的素数输出 #include <stdio.h> #include <math.h> int main() { int i,j; printf("100~200之间的素数如下:\n"); for(i = 101; i <= 199; i++ ) { for( j = 2; j <= sqrt(i); j++ ) { if( i % j == 0 ) break; } if( sqrt(i) < j ) printf(&

100到200之间的素数输出(初)

100到200间的素数的输出(初) #include<stdio.h> main() { int i; int j; printf(100~200间的素数有:\n); for(i=100;i<=200;i++) { for(j=2;j<i;j++) { if(i%j==0) break; } if(i==j) printf("%d ",i) } return 0; }

将100到200之间的素数输出

#include<stdio.h>#include<math.h>int isSuShu(int n)//判断一个数是不是素数{ int i; for(i=2;i<=(int)sqrt(n);i++) { if(n%i==0) { return 0; } } return 1;}int main(){ int n; for(n=100;n<=200;n++) { if(isSuShu(n)) { printf("%d ",n); } } return

100-200之间的素数输出

#include<stdio.h>int main(){int i = 0;int count=0;for (i = 100; i <= 200; i++){ int j = 0;    for (j = 2; j <= i-1; j++) {  if (i%j == 0)  {   break;  } }      if (i == j) {  printf("%d\n", i);  count++; }}printf("\ncount=%d\n&q

100到200之间的素数输出(改)

#include<stdio.h> #include<math.h> int main() {     int i;     int j;     for(i=101;i<=200;i+=2);     {                for(j=2;j<=sqrt(i);i++)        {            if(i%j==0)            {              break;            }            if(j&g

8.求出100~230之间所有素数之和,先在屏幕上输出,再求和

#include <iostream>#include <cmath>//可以使用一些内置函数using namespace std;int isprime(int x);int main(){    int m,n;    for(m=101;m<230;m++)    {       if(isprime(m))            cout<<m<<endl;    }    for(m=101;m<230;m++)    {     

判断2~100的所有素数,是素数输出并打印

/** * 判断2~100的所有素数,是素数输出并打印 * 10个一换行 */ public class IsPrime { public static void main(String[] args) { int num = 100; printPrime(num); } public static void printPrime(int num) { int count = 0; //记素数的个数 /*检验2~num之间所有的数字*/ for (int i = 2; i <= num; i+

实现100以内的素数输出(Python与C++对比)

今天从链接http://www.2cto.com/kf/201302/187699.html中看到了Python实现100以内的素数输出的算法,颇受感触.尤其是被其中的Python的列表生成器的使用方式帅到了! 看完Python的算法实现之后,先是回到老本行用C++实现了一遍,通过对比,你就可以发现Python真的是太简洁了!!! 1 /* 2 题目:100以内的素数输出算法验证 3 时间:2015年9月11日 4 作者:LeonWen 5 */ 6 7 #include "stdafx.h&q

Java基础知识强化04:判断101~200之间有多少素数

判断101~200之间有多少素数? 1 package himi.hebao; 2 3 /** 4 * (1).编写函数isPrime()用来判断输入数据是否为素数 (2).遍历判断101~200之间的数据是否为素数,并且计数count 5 * 6 * @author Administrator 7 * 8 */ 9 10 public class TestDemo05 { 11 12 public static void main(String[] args) { 13 int count =