严凯 发表于 2020-11-26 09:28:57

超级无敌简单

#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;
                }
A:                if ((int)ch < 0)
                {
                        target += 2;
B:                }
                length++;
      }

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

      return 0;
}

//哪个A到B是什么意思?是字符型中文转换成整型,就是个负数吗?一个汉字占几个字节?算几个字符?

jackz007 发表于 2020-11-26 10:40:58

本帖最后由 jackz007 于 2020-11-26 10:44 编辑

      在 GBK 编码方案中每个中文字符占用 2 个字节,两个字节的编码值都大于 127,如果保存字符的变量定义使用的是 char,那么,每个中文字节的编码值都一定是负值。建议用 unsigned char 来定义用于保存字符的变量类型,这样,就不会出现负值编码了。
      

风过无痕1989 发表于 2020-11-26 10:41:16

A、B 在程序中没有什么作用,反而会报错
一个中文汉字占两个字节
此程序输入中文时,统计的字符数目是不正确的。我将键盘上的每一个键(除 Z 键外,对应的每一个五笔汉字输入进去),一共25个,可此程序统计只有16个汉字

严凯 发表于 2020-11-26 13:21:00

风过无痕1989 发表于 2020-11-26 10:41
A、B 在程序中没有什么作用,反而会报错
一个中文汉字占两个字节
此程序输入中文时,统计的字符数目是不 ...

但是这个是小甲鱼的题啊,他的答案就是这样S1E22里面动动手的一道题

严凯 发表于 2020-11-26 13:21:32

jackz007 发表于 2020-11-26 10:40
在 GBK 编码方案中每个中文字符占用 2 个字节,两个字节的编码值都大于 127,如果保存字符的变量定义 ...

谢谢,懂了,但是哪个A和B表示了什么

风过无痕1989 发表于 2020-11-26 13:46:42

严凯 发表于 2020-11-26 13:21
但是这个是小甲鱼的题啊,他的答案就是这样S1E22里面动动手的一道题

我又去 S1E22 看了,没有看到他在哪个程序里,有 A 和 B

jackz007 发表于 2020-11-26 14:06:17

严凯 发表于 2020-11-26 13:21
谢谢,懂了,但是哪个A和B表示了什么

      A: 和 B: 应该是语句标号,是专门给 goto 语句当目标的,可是,代码中又找不到 goto 语句,那么,这两个标号就没有意义了。估计借用的是其它源代码文件,修改的时候忘记删除了。

严凯 发表于 2020-11-26 14:34:58

jackz007 发表于 2020-11-26 14:06
A: 和 B: 应该是语句标号,是专门给 goto 语句当目标的,可是,代码中又找不到 goto 语句,那么 ...

额,我的A和B就是我私自加的,对代码是没有作用的,就是想告诉大家,我哪里不懂

风过无痕1989 发表于 2020-11-26 23:24:16

严凯 发表于 2020-11-26 14:34
额,我的A和B就是我私自加的,对代码是没有作用的,就是想告诉大家,我哪里不懂

有不明白的地方,用双斜杠在语句后面说明,不要在程序中添加任何字符、标记,这样会查找问题带很多麻烦
,我试了一下,分别输入数字、英文字母、键盘非字母字符及中文,只有 ch 接收中文时,ch < 0 ,可以说明:ch < 0 就是统计中文字符的

严凯 发表于 2020-11-27 19:19:04

风过无痕1989 发表于 2020-11-26 23:24
有不明白的地方,用双斜杠在语句后面说明,不要在程序中添加任何字符、标记,这样会查找问题带很多麻烦
...

好的,大佬,他那个target+2,是不是因为一个汉族占两个字节

风过无痕1989 发表于 2020-11-27 20:18:22

严凯 发表于 2020-11-27 19:19
好的,大佬,他那个target+2,是不是因为一个汉族占两个字节

应该是吧。
老实说,为了你的 A 和 B,我不得不去购买上题,费上了 10 个鱼币(虽然我不缺鱼币,但也没必要去消费这种非必要的消费)

严凯 发表于 2020-12-2 17:53:42

风过无痕1989 发表于 2020-11-27 20:18
应该是吧。
老实说,为了你的 A 和 B,我不得不去购买上题,费上了 10 个鱼币(虽然我不缺鱼币,但也没 ...

我的错我的错,{:10_254:},哈哈哈哈哈
页: [1]
查看完整版本: 超级无敌简单