鱼C论坛

 找回密码
 立即注册
查看: 850|回复: 6

[已解决]有关于S1E22课后问题求助

[复制链接]
发表于 2021-9-8 16:37:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位大佬好,本次想咨询的是《带你学C带你飞》中S1E22里“动动手”第0题的进阶版,代码根据老师答案如下:

#include <stdio.h>
#define MAX 1024
int main()
{
    char str[MAX];
    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;
}

但在cmd及线上的编程工具中呈现出两种不同的答案:
1.菜鸟工具运行结果
请输入一个字符串:鱼C工作室-FishC.com
您输入的字符串长度为:15

2.cmd运行结果
请输入一个字符串:鱼C工作室-FishC.com
您输入的字符串长度为:13

请问下是什么原因造成CMD中的字符数量读取不正确呢



最佳答案
2021-9-8 17:08:31
zjohannes 发表于 2021-9-8 16:55
对不起我以后会注意的

在cmd中运行结果如下

可以看到,第一个是一个中文字符两个字节
第二个是一个中文字符三个字节
这个程序计算的是一个中文三个字节的情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-8 16:45:20 | 显示全部楼层
提问题的时候 不要这样 《带你学C带你飞》中S1E22里“动动手”第0题的进阶版
你直接复制一遍题目贴出来会更好,更方便别人回答你的问题


估计是编码问题,编码不一样
在两个地方运行这个程序,看看输出有什么不一样
#include <stdio.h>

int main(void)
{
    char str[1024];
    fgets(str, 1024, stdin);
    for(size_t i = 0; str[i]; ++i) printf("%d ", str[i]);
    printf("\n");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-8 16:55:44 | 显示全部楼层
人造人 发表于 2021-9-8 16:45
提问题的时候 不要这样 《带你学C带你飞》中S1E22里“动动手”第0题的进阶版
你直接复制一遍题目贴出来会 ...

对不起我以后会注意的

在cmd中运行结果如下
-45 -29 67 -71 -92 -41 -9 -54 -46 45 70 105 115 104 67 46 99 111 109 10

在菜鸟工具中运行结果如下
-23 -79 -68 67 -27 -73 -91 -28 -67 -100 -27 -82 -92 45 70 105 115 104 67 46 99 111 109
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-8 17:08:31 | 显示全部楼层    本楼为最佳答案   
zjohannes 发表于 2021-9-8 16:55
对不起我以后会注意的

在cmd中运行结果如下

可以看到,第一个是一个中文字符两个字节
第二个是一个中文字符三个字节
这个程序计算的是一个中文三个字节的情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-8 17:24:03 | 显示全部楼层
人造人 发表于 2021-9-8 17:08
可以看到,第一个是一个中文字符两个字节
第二个是一个中文字符三个字节
这个程序计算的是一个中文三个 ...

原来如此!请问下大大一般是使用什么编码进行编译呢,这样能预防下次出现这种问题!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-8 17:59:19 | 显示全部楼层
zjohannes 发表于 2021-9-8 17:24
原来如此!请问下大大一般是使用什么编码进行编译呢,这样能预防下次出现这种问题!

用 utf-8,utf-8 是一个中文字符三个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-8 18:04:55 | 显示全部楼层
人造人 发表于 2021-9-8 17:59
用 utf-8,utf-8 是一个中文字符三个字节

感谢大大!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 07:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表