小符号 大影响

简介: C语言学习bug记录第一弹

项目场景:


用函数实现判断100~200之间的素数

问题描述:


写代码过程成中在if (1 == is_prime(i))语句后面加上了;(分号)

从而导致代码运行结果出现偏差。

#include<stdio.h>
#include<math.h>
int is_prime(int i)
{
  int j = 0;
  for (j = 2; j <= sqrt(i); j++)
  {
    if (i % j == 0)
      return 0;
  }
  return 1;
}
int main()
{
  int i = 0;
  int count = 0;
  for (i = 100; i <= 200; i++)
  {
    if (1 == is_prime(i));//是素数返回1,不是返回0
    {
      count++;
      printf("%d ", i);
    }
  }
  printf("\ncount=%d\n", count);
  return 0;
}

原因分析:


if(条件)

语句1;

的代码,当if(条件)后面加了分号之后,将成为

if(条件);

语句1;

这样,当条件表达式为真或不为真,都会执行语句1,且为真时,执行的是空语句,即分号前的语句,相当于:

if( 条件) 空语句;

语句1;

在你的代码中第十八行,if后面加了分号,意味着不管1 == is_prime(i)是否为真,都会直接执行count++;printf("%d ", i);。

所以运行结果就是100~200之间的数

解决方案:


将if (1 == is_prime(i))后的分号去掉

#include<stdio.h>
#include<math.h>
int is_prime(int i)
{
  int j = 0;
  for (j = 2; j <= sqrt(i); j++)
  {
    if (i % j == 0)
      return 0;
  }
  return 1;
}
int main()
{
  int i = 0;
  int count = 0;
  for (i = 100; i <= 200; i++)
  {
    if (1 == is_prime(i))//是素数返回1,不是返回0
    {
      count++;
      printf("%d ", i);
    }
  }
  printf("\ncount=%d\n", count);
  return 0;
}

相关文章
|
9月前
|
存储 编译器 程序员
【C语言】auto 关键字详解
`auto` 关键字用于声明局部变量的自动存储类,其作用主要体现在变量的生命周期上。尽管现代C语言中 `auto` 的使用较少,理解其历史背景和作用对于掌握C语言的存储类及变量管理仍然很重要。局部变量默认即为 `auto` 类型,因此在实际编程中,通常不需要显式声明 `auto`。了解 `auto` 关键字有助于更好地理解C语言的存储类及其在不同场景中的应用。
455 1
|
网络协议 算法 安全
Android 面试必备 - 计算机网络基本知识(TCP,UDP,Http,https)
Android 面试必备 - 计算机网络基本知识(TCP,UDP,Http,https)
|
C++
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目(二)
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目
222 0
|
编译器 C++
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(下)
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(下)
71 0
|
安全 Java API
深度解析 Spring Security:身份验证、授权、OAuth2 和 JWT 身份验证的完整指南
Spring Security 是一个用于保护基于 Java 的应用程序的框架。它是一个功能强大且高度可定制的身份验证和访问控制框架,可以轻松地集成到各种应用程序中,包括 Web 应用程序和 RESTful Web 服务。 Spring Security 提供了全面的安全解决方案,用于身份验证和授权,并且可以用于在 Web 和方法级别上保护应用程序。
1249 0
|
存储 Unix 编译器
C语言命令行参数
C语言命令行参数
107 0
剑指 Offer 07. 重建二叉树
剑指 Offer 07. 重建二叉树
145 0
|
机器学习/深度学习 算法
机器学习:过拟合与欠拟合是如何被解决的?
机器学习:过拟合与欠拟合是如何被解决的?
306 0
机器学习:过拟合与欠拟合是如何被解决的?
|
Linux 开发工具 git
14 Git 使用问题总结
问题分析 : could not lock config file %HOMEDRIVE%%HOMEPATH%/.gitconfig 的问题 在我的电脑上 HOME 的值是 %HOMEDRIVE%%HOMEPATH% 竟然不识别。已知 %homedrive% 指操作系统所在盘默认为C:,%HOMEPATH% 指的是用户所在目录,举例说明\Users\zhangsan。 所以手动改成 C:\Users\hp 即可。
513 0
14 Git 使用问题总结