yixinwenxin 发表于 2019-9-26 18:20:00

while语句真的...

#include<stdio.h>
int main()
{
        int ch;
        int num =0;
        printf("请输入待转换的字符串:");
        do
        {
                ch=getchar();
                if(ch>='0'&&ch<='9')//'0'    字符?ASCII码?
                {
                        num=10*num+(ch-'0');//-'0'?那'9'呢?
                }
                else
                {
                        if(num)
                        {
                                break;//如果已有数字,则退出循环 ?
                        }
                }
        }
        while(ch!='\n');//不等于回车继续do 循环       等于回车跳出循环执行下一条代码
        printf("结果是:%d\n",num);
        return 0;
}









#include <stdio.h>
#include <math.h>

int main()
{
      int ch;
      long long num = 0;
      long long temp; // 临时变量,用于测试是否超出范围
      int is_overflow = 0;

      const int max_int = pow(2, sizeof(int) * 8) / 2 - 1;
      const int min_int = pow(2, sizeof(int) * 8) / 2 * (-1);

      printf("请输入待转换的字符串:");

      do
      {
                ch = getchar();

                if (ch >= '0' && ch <= '9')
                {
                        temp = 10 * num + (ch - '0');
                        if (temp > max_int || temp < min_int)
                        {
                              is_overflow = 1;
                              break;
                        }
                        else
                        {
                              num = temp;
                        }
                }
                else
                {
                        if (num)
                        {
                              break; // 如果已有数字,则退出循环
                        }
                }

      }
      while (ch != '\n');

      if (is_overflow)
      {
                printf("数值超出范围,结果未定义!\n");
      }
      else
      {
                if (!num)
                {
                        printf("并未找到任何数值!\n");
                }
                else
                {
                        printf("结果是:%d\n", num);
                }
      }

      return 0;
}

循环看的懂定义也看的懂等都放一起就有些懵了   希望能逐条解释下劳烦了...

画载舟中 发表于 2019-9-26 18:20:01

本帖最后由 画载舟中 于 2019-9-26 19:06 编辑

#include <stdio.h>
#include <math.h>

int main()
{
      int ch;
      long long num = 0;
      long long temp; // 临时变量,用于测试是否超出范围
      int is_overflow = 0;

      const int max_int = pow(2, sizeof(int) * 8) / 2 - 1;                                                   //获取 int 最大范围 取值范围 pow(2,32) /2 -1    正数
      const int min_int = pow(2, sizeof(int) * 8) / 2 * (-1);                                                //获取 int 最大范围 取值范围 pow(2,32) /2 * -1负数       signed int 的取值范围    -2147483648 ~ 2147483647

      printf("请输入待转换的字符串:");

      do
      {
                ch = getchar();

                if (ch >= '0' && ch <= '9')
                {
                        temp = 10 * num + (ch - '0');                                                                        //10*num+(ch -'0')   相当于保留个位数 比如我输入 32f    第一次循环 3到第二个数 2 就要把第一循环的 3*10变成 30+2   不*10 就变成 3+2 =5不符合输入的 32f
                        if (temp > max_int || temp < min_int)                                                                //这里判断是不是超过这个signed int 的取值范围    -2147483648 ~ 2147483647
                        {
                              is_overflow = 1;                                                                                        真 //结果 返回1
                              break;                                                                                                  // 结束 do..while(ch != '\n')循环
                        }
                        else                                                                                                               
                        {
                              num = temp;                                                                                        // 把临时变量temp的值 赋予 num
                        }
                }
                else                                                               
                {
                        if (num)                                                                                               //如果 num 已经赋值
                        {
                              break; // 如果已有数字,则退出循环                                                //结束 do..while(ch != '\n'); 循环
                        }
                }

      }
      while (ch != '\n');

      if (is_overflow)                                                                                                        //判断上边结果是真:   输入的 值 超过 signed int 的取值范围    -2147483648 ~ 2147483647
      {
                printf("数值超出范围,结果未定义!\n");
      }
      else
      {
                if (!num)                                                                                                //判断循环体 do..while(ch != '\n');    有没有使用   num    开头已经赋值num=0;   !num是0就说明一次都没使用过;
                {
                        printf("并未找到任何数值!\n");
                }
                else
                {
                        printf("结果是:%d\n", num);                                                        //输出上面已经赋值的 num
                }
      }

      return 0;
}

yixinwenxin 发表于 2019-9-26 21:23:53

画载舟中 发表于 2019-9-26 19:05
#include
#include



厉害了我的哥
你是怎么学的?
这难道就是学霸跟学渣的区别{:10_266:}

画载舟中 发表于 2019-9-26 22:43:45

yixinwenxin 发表于 2019-9-26 21:23
厉害了我的哥
你是怎么学的?
这难道就是学霸跟学渣的区别

{:10_266:}{:10_266:}表示只能   理解   要我写 是写不出来的
页: [1]
查看完整版本: while语句真的...