|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目要求:
C 语言中有个 atoi 函数,用于将字符串中的值解析为对应的整型数字。现在要求我们自己写一个程序,实现类似的功能。
A. 将用户输入的字符串中代表数字的字符转换为整型数值e;
B. 打印转换结果
C. 只打印第一组数字
D. 如果字符串中不存在任何表示数值的字符,则打印“并未找到任何数值”.
E.检测数值是否超出整型变量(int)可存放的范围,如果超出范围,则打印“数值超出范围,结果未定义!”的提醒。
F.为了达到锻炼的效果,整型变量的范围需要自己计算,不使用 <limits.h> 头文件。
我的代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
char ch;
long long num = 0; //最终结果
long long temp; //判断是否超出范围
int is_overflow = 0; //记录是否超出范围
const int max_int = pow(2, sizeof(int)* 8) / 2 - 1; //int的最大值
const int min_int = pow(2, sizeof(int)* 8) / 2 * (-1); //int 的最小值
printf("请输入待转换的字符串:");
do
{
ch = getchar();
if(ch >= '0' && ch <='9')
{
temp = num *10 +(ch - '0');
if(temp > max_int || temp < min_int)
{
is_overflow = 1;
break;
}
else
{
num = temp;
}
}
else if(num != 0)
{
break; //只打印第一组数字
}
}
while((ch = getchar()) != '\n');
if(is_overflow == 1)
{
printf("数值超出范围,结果未定义!\n");
}
else if(num != 0)
{
printf("结果是 %d",num);
}
else printf("并未找到任务数值!\n");
return 0;
}
运行出来得不到全部数字 帮我看看哪里有问题吧谢谢大佬【玫瑰】【玫瑰】
您的代码有一个小问题。在每次循环中,您读取了一个字符并检查它是否是数字。如果是数字,您将其转换为整数并检查是否超出 int 类型的范围。如果没有超出范围,您将其添加到 num 中。但是,当您遇到非数字字符时,您立即退出了循环,这意味着您只会处理字符串中的第一个数字。
要解决这个问题,您需要修改循环逻辑,以便能够处理整个字符串而不仅仅是第一个数字。另外,您需要在程序中添加一些逻辑来处理字符串中不存在任何表示数值的字符的情况。
以下是修改后的代码:
- #include <stdio.h>
- #include <math.h>
- int main()
- {
- char ch;
- long long num = 0; // 最终结果
- long long temp; // 用于判断是否超出范围
- int is_overflow = 0; // 记录是否超出范围
- int has_digit = 0; // 记录是否找到数字
- const int max_int = pow(2, sizeof(int) * 8) / 2 - 1; // int 的最大值
- const int min_int = pow(2, sizeof(int) * 8) / 2 * (-1); // int 的最小值
- printf("请输入待转换的字符串:");
- while ((ch = getchar()) != '\n')
- {
- if (ch >= '0' && ch <= '9')
- {
- temp = num * 10 + (ch - '0');
- if (temp > max_int || temp < min_int)
- {
- is_overflow = 1;
- break;
- }
- else
- {
- num = temp;
- has_digit = 1; // 标记找到数字
- }
- }
- else if (has_digit)
- {
- break; // 已经找到数字,遇到非数字字符则退出循环
- }
- }
- if (is_overflow == 1)
- {
- printf("数值超出范围,结果未定义!\n");
- }
- else if (has_digit)
- {
- printf("结果是 %lld\n", num);
- }
- else
- {
- printf("并未找到任何数值!\n");
- }
- return 0;
- }
复制代码
这个修改后的代码会一直读取输入的字符,直到遇到换行符为止。它会处理整个字符串,并根据题目要求进行相应的处理。
|
|