wuyu123321 发表于 2021-8-12 16:20:55

s1e13内容

萌新想问一下为什么输入0不会得到输出的0,困扰我一下午了
求帮助(代码挺啰嗦的,不够简洁,很抱歉)
#include<stdio.h>
#include<math.h>
int main()
{
    int a;
    long long b=0;
    long long e=0;
    char f;
    const int c=pow(2,sizeof(int)*8)/2-1;
    const int d=pow(2,sizeof(int)*8)/2*(-1);
        while((a=getchar())!='\n')
        {
                f=a;
                if(a>='0'&&a<='9')
                {
                        b=10*b+(a-'0');
                }
        }
                {
                        if(b>=d&&b<=c)
                        {
                                if(b!=0)
                                printf("%lld",b);
                        }
                        else
                        {
                                printf("超出定义范围");
                                return 0;
                        }
                }
                if(b!=0)
                {
                                while(1)
                        {
                                printf("\n");
                                while((a=getchar())!='\n')
                                {
                                        e=10*e+(a-'0');
                                }
                                if(e>=d&&e<=c)
                                {
                                        printf("%lld",b);
                                }
                                else
                                {
                                        printf("超出定义范围");
                                        return 0;
                                }
                        }
                }
        else if(f==0&&b==0)
        {
                printf("0");
        }
        else
        {
                printf("未找到数值");
        }
        return 0;
}

jhq999 发表于 2021-8-12 16:20:56

本帖最后由 jhq999 于 2021-8-12 17:54 编辑

wuyu123321 发表于 2021-8-12 17:28
好像不是。
因为b=10*b+(a-'0');这个语句的前提是a>='0'&&a

刚才说说错了,a=getchar();a=48

“else if(f==0&&b==0)
      {
                printf("0");
      }
      else
      {
                printf("未找到数值");
      }”
因为前面f=a,所以f等于48,不等于0,所以printf("未找到数值");
所以在a=getchar();后面应该加上a=a-48;

万千只cnm 发表于 2021-8-12 16:25:48

你这程序想干嘛

wuyu123321 发表于 2021-8-12 16:33:24

万千只cnm 发表于 2021-8-12 16:25
你这程序想干嘛

用s1e13课后作业发挥了下,本来作用是提取数字的。后来又想多加点内容练练手,然后测试的时候发现0输出不了0。我百思不得其解,自己看不出问题,就来求助了。

jhq999 发表于 2021-8-12 16:57:38

本帖最后由 jhq999 于 2021-8-12 16:59 编辑

输入0
a=getchar();
a的值是0,‘0’的值是48
b=10*b+(a-'0');
b的值就是-48
不知道你是不是这个原因

wuyu123321 发表于 2021-8-12 17:28:23

jhq999 发表于 2021-8-12 16:57
输入0
a=getchar();
a的值是0,‘0’的值是48


好像不是。
因为b=10*b+(a-'0');这个语句的前提是a>='0'&&a<='9'
a既然是0了也就不满足48~57了吧
你看我说的对不对
emmmm

wuyu123321 发表于 2021-8-12 18:21:59

jhq999 发表于 2021-8-12 17:49
刚才说说错了,a=getchar();a=48

“else if(f==0&&b==0)


我之前简直傻了,谢谢了
页: [1]
查看完整版本: s1e13内容