维德 发表于 2020-5-26 10:04:44

C语言S1E12

我没写bool类型也能运行那bool有什么用?

小甲鱼的
#include <stdio.h>
#include <stdbool.h>

int main()
{
      float op1, op2;
      char ch;
      float result;
      bool invalid = false;

      printf("请输入式子:");
      scanf("%f %c %f", &op1, &ch, &op2);

      switch (ch)
      {
                case '-': op2 = -op2; // no break
                case '+': result = op1 + op2; break;
                case '*': result = op1 * op2; break;
                case '/':
                        if (op2 != 0)
                        {
                              result = op1 / op2;
                              break;
                        }
                        else
                        {
                              invalid = true;
                              break;
                        }
      }

      if (invalid)
      {
                printf("除数不能为零!\n");
      }
      else
      {
                printf("结果是:%.2f\n", result);
      }

      return 0;
}#include<stdio.h>
int main()
{
        char ch;
        float b,q,z;
       
        printf("请输入式子:");
        scanf("%f %c %f",&b,&ch,&q);
       
        switch(ch)
        {
                case '+':z=b+q;break;
                case '-':z=b-q;break;
                case '*':z=b*q;break;
                case '/':if(q==0)
                {
                        printf("余数不能为零。");
                }
                else
                {
                        z=b/q;
                }
               
                }
                printf("结果是:%.2f",z);
                return 0;
                }


我的

KevinHu 发表于 2020-5-26 10:04:45

bool就是一个记录除数是否为零的标志,你的第二种方法也可以{:10_256:}

KevinHu 发表于 2020-5-27 08:36:34

都可以{:10_256:}

永恒的蓝色梦想 发表于 2020-5-27 09:00:13

第2种肯定是不行的,除数为0会打印未初始化内存的 z。如果想这么写的话,得多加一行 return 0;
代码见下:#include<stdio.h>


int main() {
    char ch;
    float b, q, z;

    printf("请输入式子:");
    scanf("%f %c %f", &b, &ch, &q);

    switch (ch) {
      case '+':
            z = b + q;
            break;

      case '-':
            z = b - q;
            break;

      case '*':
            z = b * q;
            break;

      case '/':
            if (q == 0) {
                printf("余数不能为零。");
                return 0;
            }
            else {
                z = b / q;
            }

    }
    printf("结果是:%.2f", z);
    return 0;
}

CodingCat_k 发表于 2020-5-27 15:58:53

bool本质上还是用于增强代码可读性的,就像true/false 肯定比1和0让人更好懂(比如while(true){...} );
如果进行反汇编,会发现高级语言的流程控制也是基于bool值进行的(先比较再进行jnz之类的跳转),
如果要增强代码可读性建议用bool值或者自己做相关宏定义;
简而言之,这是可选项,并非必选。
====================================================
还有建议楼主声明变量的时候进行相关初始化,野指针、野变量危害很大!!!

维德 发表于 2020-5-27 20:14:07

KevinHu 发表于 2020-5-26 10:04
bool就是一个记录除数是否为零的标志,你的第二种方法也可以

谢了 man
页: [1]
查看完整版本: C语言S1E12