我是C的新手,最近开始学习指针。我试图输入一个字符串,然后获取字符串中的大小写字符数。我想在指针的帮助下做这件事。
这是我的代码:
#include <stdio.h>
#include <string.h>
int main()
{
char s[20];
int cu = 0, cl = 0, cs = 0;
scanf("%s", s);
printf("\n%s", s);
for (int *i = s; *i != '\0'; i++)
{
if ((*i >= 'A') && (*i <= 'Z'))
cu++;
else
if ((*i >= 'a') && (*i <= 'z'))
cl++;
else
cs++;
}
printf("\n uppercase:%d ,lowercase:%d ,others:%d", cu, cl, cs);
}
这是我得到的输出:
QWerTy12
QWerTy12
uppercase:0 ,lowercase:0 ,others:3
如你所见,这是不正确的。有人能告诉我我做错了什么吗?
2条答案
按热度按时间7vux5j2d1#
嗯,太像@Barmar了。保存为wiki,
关键错误:未在启用所有警告的情况下进行编译
将所有警告启用后,问题将被快速识别:
保存时间,启用所有警告并使用一致的指针类型。
vwkv1x7d2#
不能使用
int *
指针访问字符串中的字符。当您取消引用指针时,它将读取多个字符(如果int
是32位,则为4个字符),并且i++
将递增多个字符。您必须使用
char *
,因此将int *i
更改为char *i
。确保在编译器选项中启用了完整警告,并注意警告。当我试图编译你的代码时,我得到了这样的警告: