zizaipanhongb 发表于 2018-1-15 20:59:14

输入一行字符串求其中的数字个数的和

#include<stdio.h>

int main(void)
{
      char str = {'\0'};
      int sum = 0,k=0;
      char *p;
      p = &str;
      printf("请输入一行字符:");
      scanf("%s", str);
      while(*p != '\0')
      {
                if(*p >= '0' && *p <= '9')      /*判断是否为数字*/
                {
                      k=p-'0';             得到数字和
                      sum+=k;
                      k=0;
                       
                }
                p++;
      }

      printf("其中数字和=%d个\n",sum );
      return 0;
}
为什么我程序没有错,但是我运行的时候是乱码。
不是我想要的结果
求各位大神指点。

8306最硬 发表于 2018-1-15 21:04:09

本帖最后由 8306最硬 于 2018-1-15 21:07 编辑

#include<stdio.h>

int main(void)
{
      char str = {'\0'};
      int sum = 0,k= 0;
      char *p;
      p = str;
      printf("请输入一行字符:");
      scanf("%s", str);
      while(*p != '\0')
      {
                if(*p >= '0' && *p <= '9')      /*判断是否为数字*/
                {
                      k = *p -'0';             //得到数字和
                      sum+=k;
                      k=0;
                        
                }
                p++;
      }

      printf("其中数字和=%d个\n",sum );
      return 0;
}

第8行,数组名相当于指针,所以赋值的时候不用再用取地址符&了
第15行,指针取值的时候要加*
(BTW)* 和& 互为逆运算

zizaipanhongb 发表于 2018-1-15 21:57:54

8306最硬 发表于 2018-1-15 21:04
第8行,数组名相当于指针,所以赋值的时候不用再用取地址符&了
第15行,指针取值的时候要加*
(BTW)* 和 ...

(BTW)*和&互为逆运算是什么意思。

zizaipanhongb 发表于 2018-1-15 21:58:27

zizaipanhongb 发表于 2018-1-15 21:57
(BTW)*和&互为逆运算是什么意思。

谢谢你,回答了我的问题。

8306最硬 发表于 2018-1-15 22:05:30

zizaipanhongb 发表于 2018-1-15 21:58
谢谢你,回答了我的问题。

不客气~
逆运算是说*(&var) == var
&操作和*操作会抵消

zizaipanhongb 发表于 2018-1-15 22:20:42

8306最硬 发表于 2018-1-15 22:05
不客气~
逆运算是说
&操作和*操作会抵消

知道了
页: [1]
查看完整版本: 输入一行字符串求其中的数字个数的和