C语言 编译函数 输入一段字符,求其中空格的个数

#include<stdio.h>
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);
}
运行结果总是不对,是哪里出了问题?
另外怎么把程序改成函数?那个格式是什么,还有返回值什么的

下面是编译函数,求其中小写字母的个数
#include<stdio.h>
void main()
{
char str[30];
int i,b=0;
printf("输入一个字符串:\n");
scanf("%s",&str);
getchar();
for(i=0;str[i]!='0';i++)
{ if (str[i]>='a'&& str[i]<='z')b++;}
printf("%d\n",b);
}
输入4个字母,结果算得5个,是哪里的问题
最新回答
看不见的坚强

2024-09-30 07:21:36

貌似几个方面有问题:
1.接收有空格的
字符串
用gets(str);
scanf遇到空格自动结束接收。
2.scanf语句中,数组名就是它的地址,所以不要加&。
3.两个函数中,getchar();这句是多余的。
4.后一个函数中,for语句有问题(当你输入的字符中有0时会出错)。
5.下面代码可以供你参考。
代码一:
#include<stdio.h>
void main()
{
char str[30];
int i,a=0;
printf("Input string:\n");
gets(str);
for(i=0;str[i]!='0';i++)
{
if (str[i]==' ')
a++;
}
printf("%d\n",a);
}
代码二:
#include<stdio.h>
void main()
{
char str[30];
int i,t,b=0;
printf("Input string:\n");
gets(str);
t=strlen(str);
for(i=0;i<t;i++)
{
if (str[i]>='a'&& str[i]<='z')
b++;
}
printf("%d\n",b);
}
寄意

2024-09-30 03:22:18

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;
}
阴郁钢琴

2024-09-30 01:52:29

scanf("%s",&str);使用了%s,就不用加&了,改为:scanf("%s",str);
for(i=0;str[i]!='0';i++) ,应该是结束标示符,而不是‘0’,改为:for(i=0;str[i]!='\0';i++)。
夙词欢

2024-09-30 05:56:49

#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);
}
决绝的不遗憾

2024-09-30 08:58:59

代码存在如下问题:
1) C语言中,字符串结束的标记是'\0',虽然其数值上确实就是0,但你不能用字符'0'去判断(字符'0'的ASCII码是48)。故两段代码中的循环都要做出修改,此修改可解决第二段代码的错误。
2) C语言的scanf()函数在读取输入流时,回车和空格都是终结符,所以通过scanf()函数来输入字符串,你的变量str仅得到了用户输入的第一个空格前面的内容(例如输入“abc de fgh”,实际str = "abc\0"),所以此段代码即使修改了循环那里的错误,也无法得到正确的结果。想要读入空格,请更换其他输入函数。