有关于S1E22课后问题求助
各位大佬好,本次想咨询的是《带你学C带你飞》中S1E22里“动动手”第0题的进阶版,代码根据老师答案如下:#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;
}
但在cmd及线上的编程工具中呈现出两种不同的答案:
1.菜鸟工具运行结果
请输入一个字符串:鱼C工作室-FishC.com
您输入的字符串长度为:15
2.cmd运行结果
请输入一个字符串:鱼C工作室-FishC.com
您输入的字符串长度为:13
请问下是什么原因造成CMD中的字符数量读取不正确呢
提问题的时候 不要这样 《带你学C带你飞》中S1E22里“动动手”第0题的进阶版
你直接复制一遍题目贴出来会更好,更方便别人回答你的问题
估计是编码问题,编码不一样
在两个地方运行这个程序,看看输出有什么不一样
#include <stdio.h>
int main(void)
{
char str;
fgets(str, 1024, stdin);
for(size_t i = 0; str; ++i) printf("%d ", str);
printf("\n");
return 0;
}
人造人 发表于 2021-9-8 16:45
提问题的时候 不要这样 《带你学C带你飞》中S1E22里“动动手”第0题的进阶版
你直接复制一遍题目贴出来会 ...
{:10_266:}对不起我以后会注意的
在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 zjohannes 发表于 2021-9-8 16:55
对不起我以后会注意的
在cmd中运行结果如下
可以看到,第一个是一个中文字符两个字节
第二个是一个中文字符三个字节
这个程序计算的是一个中文三个字节的情况 人造人 发表于 2021-9-8 17:08
可以看到,第一个是一个中文字符两个字节
第二个是一个中文字符三个字节
这个程序计算的是一个中文三个 ...
原来如此!请问下大大一般是使用什么编码进行编译呢,这样能预防下次出现这种问题! zjohannes 发表于 2021-9-8 17:24
原来如此!请问下大大一般是使用什么编码进行编译呢,这样能预防下次出现这种问题!
用 utf-8,utf-8 是一个中文字符三个字节
人造人 发表于 2021-9-8 17:59
用 utf-8,utf-8 是一个中文字符三个字节
感谢大大!
页:
[1]