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 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;
}
画载舟中 发表于 2019-9-26 19:05
#include
#include
厉害了我的哥
你是怎么学的?
这难道就是学霸跟学渣的区别{:10_266:} yixinwenxin 发表于 2019-9-26 21:23
厉害了我的哥
你是怎么学的?
这难道就是学霸跟学渣的区别
{:10_266:}{:10_266:}表示只能 理解 要我写 是写不出来的
页:
[1]