C课后作业
本帖最后由 a89361461 于 2017-6-10 17:59 编辑#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;
}
第22行代码 temp = 10 * num + (ch - '0');
什么意思看不懂 你是看不懂 ch - '0' 吗? 本帖最后由 a89361461 于 2017-6-10 20:42 编辑
人造人 发表于 2017-6-10 19:34
你是看不懂 ch - '0' 吗?
我现在又想明白了。但是编译运行时 输入 0 ,结果显示并未找到任何值。如果要让结果显示 0,代码该如何改?
S1E13 动动手 第2题 a89361461 发表于 2017-6-10 20:39
我现在又想明白了。但是编译运行时 输入 0 ,结果显示并未找到任何值。如果要让结果显示 0,代码该如 ...
小甲鱼老师的答案
#include <stdio.h>
int main()
{
int ch;
int num = 0;
printf("请输入待转换的字符串:");
do
{
ch = getchar();
if (ch >= '0' && ch <= '9')
{
num = 10 * num + (ch - '0');
}
else
{
if (num)
{
break; // 如果已有数字,则退出循环
}
}
}
while (ch != '\n');
printf("结果是:%d\n", num);
return 0;
} 人造人 发表于 2017-6-10 21:23
小甲鱼老师的答案
代码怎么阉割那么多呀,不符合原来的题意啊。能不能就在原来的代码改动,输入 0 时,结果就显示 0,
而不是显示并未找到任何数值,因为 0 也是一个数值呀 a89361461 发表于 2017-6-10 22:12
代码怎么阉割那么多呀,不符合原来的题意啊。能不能就在原来的代码改动,输入 0 时,结果就显示 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');
num = temp;
}
else
{
if(num)
{
break; // 如果已有数字,则退出循环
}
}
} while(ch != '\n');
printf("结果是:%d\n", num);
return 0;
}
页:
[1]