star_sky 发表于 2020-2-26 17:01:39

这个程序是不是有bug啊,看了一个下午没看懂什么意思,求助各位大佬

我一开始以为这个程序是个只计算字符串里非中文个数的,后来发现是连着中文一起计算的,但是参考上机测试那个图,第一次明明3个字,第二次两个字3个英文,然后却输出3个字符,代码没有任何修改,在小甲鱼c教程课后作业22那里的。

star_sky 发表于 2020-2-26 22:13:15

#include <stdio.h>

#define MAX 1024

int main()
{
      char str;
      char *target = str;
      char ch;
      int length = 0;

      printf("请输入一个字符串:");
      fgets(str, MAX, stdin);

      while (1)
      {
                ch = *target++;
                if (ch == '\0')
                {
                        break;
                }
                if ((int)ch < 0)
                {
                        target += 2;
                }
                length++;
      }

      printf("您总共输入了 %d 个字符!\n", length - 1);

      return 0;
}

qiuyouzhi 发表于 2020-2-26 17:07:13

可以把文本代码发出来吗

蒋博文 发表于 2020-2-26 17:17:47

qiuyouzhi 发表于 2020-2-26 17:07
可以把文本代码发出来吗

那个右边的就是把

qiuyouzhi 发表于 2020-2-26 17:23:38

蒋博文 发表于 2020-2-26 17:17
那个右边的就是把

我说的是发到帖子上面

蒋博文 发表于 2020-2-26 17:27:38

qiuyouzhi 发表于 2020-2-26 17:23
我说的是发到帖子上面

emmmm,好吧误解了{:10_277:}

蒋博文 发表于 2020-2-26 17:31:16

qiuyouzhi 发表于 2020-2-26 17:23
我说的是发到帖子上面

emmmmm,我上机试了一下它发的代码,错误好多{:10_277:}

chxchxkkk 发表于 2020-2-26 17:40:26

编译器不一样吧,你这个是windows环境下,小甲鱼是linux环境

蒋博文 发表于 2020-2-26 19:13:53

chxchxkkk 发表于 2020-2-26 17:40
编译器不一样吧,你这个是windows环境下,小甲鱼是linux环境

但是都是c语言啊,小甲鱼在课程上的代码我都能运行{:10_249:}

star_sky 发表于 2020-2-26 22:12:16

qiuyouzhi 发表于 2020-2-26 17:07
可以把文本代码发出来吗

#include <stdio.h>

#define MAX 1024

int main()
{
      char str;
      char *target = str;
      char ch;
      int length = 0;

      printf("请输入一个字符串:");
      fgets(str, MAX, stdin);

      while (1)
      {
                ch = *target++;
                if (ch == '\0')
                {
                        break;
                }
                if ((int)ch < 0)
                {
                        target += 2;
                }
                length++;
      }

      printf("您总共输入了 %d 个字符!\n", length - 1);

      return 0;
}

star_sky 发表于 2020-2-26 22:16:32

chxchxkkk 发表于 2020-2-26 17:40
编译器不一样吧,你这个是windows环境下,小甲鱼是linux环境

不是,环境不同但语言标准一样,语法都一样的,我用的是ISO c99,和小甲鱼是一样的

4goodworld 发表于 2020-2-27 00:02:39

#include <stdio.h>

#define MAX 1024

int main()
{
        char str;
        char *target = str;
        char ch;
        int length = 0;

        printf("请输入一个字符串:\n");
        fgets(str, MAX, stdin);
        printf("%s",str);
        while (1)
        {
                ch = *target++;
                if (ch == '\0')
                {
                        break;
                }
                if ((int)ch < 0)
                {
                        target += 1;//之前操作的时候,target已经target ++了,所以,这边感觉只要加1就行了,不需要加2
                }
                length++;
        }

        printf("您总共输入了 %d 个字符!\n", length - 1);

        return 0;
}

良弓无箭 发表于 2020-2-27 09:48:57

在小甲鱼的编译器上一个中文字符占3个字节,而在Dev C++中一个汉字占两个字节,所以这时候就不能把指针往后移动两位了,只往后移动一位即可。
#include <stdio.h>

#define MAX 1024

int main()
{
      char str;
      char *target = str;
      char ch;
      int length = 0;

      printf("请输入一个字符串:");
      fgets(str, MAX, stdin);
      while (1)
      {
                ch = *target++;
                if (ch == '\0')
                {
                        break;
                }
                if ((int)ch < 0)
                {
                        target += 1;//指针向后移动一位。
                }
                length++;
      }

      printf("您总共输入了 %d 个字符!\n", length - 1);

      return 0;
}

Cool_Breeze 发表于 2020-3-2 17:08:02

66666
页: [1]
查看完整版本: 这个程序是不是有bug啊,看了一个下午没看懂什么意思,求助各位大佬