小符号 大影响

简介: 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;
}

相关文章
|
2月前
|
机器学习/深度学习 编译器 C语言
【C语言】数据输出的域宽控制(如何在输出数据时控制0占位)(如何输出前导0)(保留几位小数)(乘法口诀表打印不齐)等问题
【C语言】数据输出的域宽控制(如何在输出数据时控制0占位)(如何输出前导0)(保留几位小数)(乘法口诀表打印不齐)等问题
24 0
|
9月前
|
运维 Shell Python
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(一)
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)
91 0
|
9月前
|
运维 Shell Perl
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(二)
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(二)
94 0
|
编译器 C++
c++中基本类型详细解释外加基本运算规则
类型 含义 wchat_t 宽字符 bool 布尔类型 char 字符 chat16_t unicode字符 chat_32 unicode字符 short 短整型 int 整形 long 长整型 longlong 长整型 float 单精度浮点型 double 双精度浮点型 longdouble 扩展精度浮点型
90 1
|
C++ iOS开发
【C++之标准类型数据的格式输出1】输入一批数值,要求保留3位小数,且上下行小数点对齐
【C++之标准类型数据的格式输出1】输入一批数值,要求保留3位小数,且上下行小数点对齐
输出十进制“08”等其他数值,报错无效的八进制数字,换个角度,三种方法解决问题
很显然,我们自己的语言与计算机有差别,我们想法是08,09,就是十进制数前加一个零,这是一个我们自定的格式,但计算机听不懂人类语言,就默认把0+某个数看成了八进制我们知道,八进制不可能出现8以上的数字,所以写程序时就有了下面这种报错:那我们赋值、输入时,无法表达出“我们认为”的这种所谓的十进制格式时,就应该换个角度去实现。.........
输出十进制“08”等其他数值,报错无效的八进制数字,换个角度,三种方法解决问题
|
C语言
用函数方法来比较三个数字中的较大值(常规,函数)
用函数方法来比较三个数字中的较大值(常规,函数)
98 0
用函数方法来比较三个数字中的较大值(常规,函数)
|
Serverless
宏程序变量运算规则
宏程序变量运算规则
|
C语言
符号配对 (20 分)
符号配对 (20 分)
154 0
【c】打印数字之间添加符号
【c】打印数字之间添加符号
95 0
【c】打印数字之间添加符号