第1个回答 2013-05-21
1
scanf("%s",&str);改为gets(str);
scanf本来就过滤了空格
void main()
{
char str[30];
int i,a=0;
printf("输入一个字符串:\n");
scanf("%s",&str);
getchar();
for(i=0;str[i]!='\0';i++)
{ if (str[i]==' ')a++;}
printf("%d\n",a);
}
2。
int main(int argc, char* argv[])
{
char str[30];
int i,b=0;
memset(str,0,sizeof(str));
printf("输入一个字符串:\n");
scanf("%s",&str);
for(i=0;str[i]!='\0';i++)
{
if (str[i]>='a'&& str[i]<='z')
b++;
}
printf("%d\n",b);
getchar();
return 0;
}
第2个回答 2013-05-21
scanf("%s",&str);使用了%s,就不用加&了,改为:scanf("%s",str);
for(i=0;str[i]!='0';i++) ,应该是结束标示符,而不是‘0’,改为:for(i=0;str[i]!='\0';i++)。
第3个回答 2013-05-21
#include<stdio.h>
void main()
{
char str[30];
int i,b=0;
printf("input a string:\n");
scanf("%s",str);
for(i=0;str[i]!='\0';i++)
{ if (str[i]>='a'&& str[i]<='z')b++;}
printf("%d\n",b);
}
第4个回答 2013-05-21
代码存在如下问题:
1) C语言中,字符串结束的标记是'\0',虽然其数值上确实就是0,但你不能用字符'0'去判断(字符'0'的ASCII码是48)。故两段代码中的循环都要做出修改,此修改可解决第二段代码的错误。
2) C语言的scanf()函数在读取输入流时,回车和空格都是终结符,所以通过scanf()函数来输入字符串,你的变量str仅得到了用户输入的第一个空格前面的内容(例如输入“abc de fgh”,实际str = "abc\0"),所以此段代码即使修改了循环那里的错误,也无法得到正确的结果。想要读入空格,请更换其他输入函数。