这个程序是不是有bug啊,看了一个下午没看懂什么意思,求助各位大佬
我一开始以为这个程序是个只计算字符串里非中文个数的,后来发现是连着中文一起计算的,但是参考上机测试那个图,第一次明明3个字,第二次两个字3个英文,然后却输出3个字符,代码没有任何修改,在小甲鱼c教程课后作业22那里的。 #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
可以把文本代码发出来吗
那个右边的就是把 蒋博文 发表于 2020-2-26 17:17
那个右边的就是把
我说的是发到帖子上面 qiuyouzhi 发表于 2020-2-26 17:23
我说的是发到帖子上面
emmmm,好吧误解了{:10_277:} qiuyouzhi 发表于 2020-2-26 17:23
我说的是发到帖子上面
emmmmm,我上机试了一下它发的代码,错误好多{:10_277:} 编译器不一样吧,你这个是windows环境下,小甲鱼是linux环境 chxchxkkk 发表于 2020-2-26 17:40
编译器不一样吧,你这个是windows环境下,小甲鱼是linux环境
但是都是c语言啊,小甲鱼在课程上的代码我都能运行{:10_249:} 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;
} chxchxkkk 发表于 2020-2-26 17:40
编译器不一样吧,你这个是windows环境下,小甲鱼是linux环境
不是,环境不同但语言标准一样,语法都一样的,我用的是ISO c99,和小甲鱼是一样的 #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;
}
在小甲鱼的编译器上一个中文字符占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;
}
66666
页:
[1]