如果孤独感 发表于 2020-3-31 17:41:42

哪里错了

本帖最后由 如果孤独感 于 2020-3-31 22:50 编辑

为什么编译成功后输入1后结果是从65加起
#include <stdio.h>

int main()
{
      int ch, in, sum = 0, n;
printf("请输入合法数字(多次输入求和):");
      ch = getchar();
      getchar();
      for (; ch >= '0' && ch <= '9'; sum += (ch - '0'))
      {
                printf("请输入合法数字:");
                ch = getchar();
                getchar();
      }

      printf("结果是:%d\n", sum);
return 0;
}

Hello. 发表于 2020-3-31 17:46:20

你确定能编译成功??!

就是要努力呀 发表于 2020-3-31 17:57:39

本帖最后由 就是要努力呀 于 2020-3-31 17:58 编辑

gechar只能获取一个字符,(注意是一个字符不是数字)返回值是字符的ascii码,'0'的ascii码是48 '9'的ascii码是57 所以要用getchar来获取字符应该减去一个48 ch = getchar() - 48;或者直接用scanf

meihua 发表于 2020-3-31 18:20:17

咋这么多的getchar。

Hello. 发表于 2020-3-31 18:40:35

就是要努力呀 发表于 2020-3-31 17:57
gechar只能获取一个字符,(注意是一个字符不是数字)返回值是字符的ascii码,'0'的ascii码是48 '9'的ascii ...

你看看他第17行

就是要努力呀 发表于 2020-3-31 19:02:50

Hello. 发表于 2020-3-31 18:40
你看看他第17行

return 0;

就是要努力呀 发表于 2020-3-31 19:03:49

检查的时候认真点这些错误编译器应该会报错的。{:10_324:}

如果孤独感 发表于 2020-3-31 22:51:01

Hello. 发表于 2020-3-31 17:46
你确定能编译成功??!

没复制好而已你看整体的错误;
总之答案是能;

如果孤独感 发表于 2020-3-31 22:51:39

就是要努力呀 发表于 2020-3-31 17:57
gechar只能获取一个字符,(注意是一个字符不是数字)返回值是字符的ascii码,'0'的ascii码是48 '9'的ascii ...

有-‘0‘

如果孤独感 发表于 2020-3-31 22:52:11

Hello. 发表于 2020-3-31 18:40
你看看他第17行

没复制好而已你看整体的错误;
总之答案是能;

lovely539351 发表于 2020-3-31 23:45:49

你在最后输入字符结束循环的时候输入字符所代表的值比‘0’大的值也被加到了sum里
你是输入q来结束对于程序来说就是1没了然后q变成新的ch计算后发现之前输入的ch不符合循环要求
最后结束循环,计算的值就错了
如果你换a来结束就变成49加起
把sum += (ch - '0')要放在循环第一个这样你输入的第一个数就不会被丢弃,而输入字符的值也不会在判定前就加给sum

页: [1]
查看完整版本: 哪里错了