求助:一个C语言学习过程中的习题
- 微风成长
- 帖子: 644
- 注册时间: 2008-12-14 18:43
- 联系:
求助:一个C语言学习过程中的习题
编写一个用于统计即时输入一段文字的空格的数目。最好能提供整个程序,虽然我遇到的问题只是不知道在程序中怎样表示空格。谢谢。
- tregedie
- 帖子: 578
- 注册时间: 2008-11-29 22:56
- 来自: Guangdong Pharmaceutical University
- 联系:
- lerosua
- 论坛版主
- 帖子: 8455
- 注册时间: 2007-11-29 9:41
- 联系:
Re: 求助:一个C语言学习过程中的习题
就是空格啰,呵呵
- windwhinny
- 帖子: 618
- 注册时间: 2007-09-26 17:34
Re: 求助:一个C语言学习过程中的习题
#include<stdio.h>
int main()
{
char *str="i am superman";
int i=0,n=0;
for(i=0;*(str+i)!='\0';i++)
if(str==' ')
n++;
printf("n=%d\n",n);
return 0;
}
int main()
{
char *str="i am superman";
int i=0,n=0;
for(i=0;*(str+i)!='\0';i++)
if(str==' ')
n++;
printf("n=%d\n",n);
return 0;
}
- ebok
- 帖子: 852
- 注册时间: 2008-02-15 0:09
Re: 求助:一个C语言学习过程中的习题
LZ说的是即时输入,LS的还要加个 scanf 改一下,
Somebody think they are full of niubility, so they play a zhuangbility, but only reflect their shability.
- windwhinny
- 帖子: 618
- 注册时间: 2007-09-26 17:34
Re: 求助:一个C语言学习过程中的习题
我试过了,scanf遇到空格就终止了ebok 写了:LZ说的是即时输入,LS的还要加个 scanf 改一下,
- 微风成长
- 帖子: 644
- 注册时间: 2008-12-14 18:43
- 联系:
Re: 求助:一个C语言学习过程中的习题
谢谢大家的帮助。
我已经写了一个管用的程序,如下:
经测试在输入一段文字后,按“Enter”键 程序将自动计算其中的空格数目。
4楼Windwinny的程序中,for这句:
“for(i=0;*(str+i)!='\0';i++)”和“if(str==' ')”中的
'*(str+i)'、'\0'、'str',不太明白是什么意思。
可能是还没学到这些概念吧,因为我还在学习中……
我已经写了一个管用的程序,如下:
代码: 全选
#include <stdio.h>
int main()
{
long c,n;
n=0;
while((c=getchar())!='/n')
if (c==' ')
++n;
printf("%d\n",n);
}
4楼Windwinny的程序中,for这句:
“for(i=0;*(str+i)!='\0';i++)”和“if(str==' ')”中的
'*(str+i)'、'\0'、'str',不太明白是什么意思。
可能是还没学到这些概念吧,因为我还在学习中……
- princelai
- 帖子: 920
- 注册时间: 2007-01-06 21:00
- 联系:
Re: 求助:一个C语言学习过程中的习题
微风成长 写了:谢谢大家的帮助。
我已经写了一个管用的程序,如下:经测试在输入一段文字后,按“Enter”键 程序将自动计算其中的空格数目。代码: 全选
#include <stdio.h> int main() { long c,n; n=0; while((c=getchar())!='/n') if (c==' ') ++n; printf("%d\n",n); }
4楼Windwinny的程序中,for这句:
“for(i=0;*(str+i)!='\0';i++)”和“if(str==' ')”中的
'*(str+i)'、'\0'、'str',不太明白是什么意思。
可能是还没学到这些概念吧,因为我还在学习中……
这个要不明白还是继续深入学习吧,这才是C的精华所在,虽然只是精华的皮毛
代码: 全选
while((c=getchar())!='/n')
代码: 全选
printf("%d\n",n);
代码: 全选
printf("%d\n",n-1);
代码: 全选
while(c=getchar()!='/n')
你试试吧,好久不动C了
- 微风成长
- 帖子: 644
- 注册时间: 2008-12-14 18:43
- 联系:
Re: 求助:一个C语言学习过程中的习题
明白你的意思。但是很反对你的观点。
是先把输入的字符赋值给c,不管它是不是空格都给c。所以,当c等于空格时,就中断循环。
而你的意思是,输入的字符要是空格的话,就不赋值给c,因此,这时c就没有值,所以就中断循环。
这样看,逻辑上执行效果是跟加括号一样的。
但是当while进行过若干次循环后,c的当前值肯定不是空格,而getchar()为空格时,c又不会被赋值,所以c保留原当前值,这样循环会无限制的进行下去,因为空格中断循环控制已经无效了。
另外,就算是第一次循环判断用getchar=空格的话,c没有赋值,也不能保证c的默认初值就是空格,所以也很有可能中断循环无效。
所以,还是原来的程序正确。去掉括号的改法,如上文所述,问题相当大。
代码: 全选
while((c=getchar())!=' '
而你的意思是,输入的字符要是空格的话,就不赋值给c,因此,这时c就没有值,所以就中断循环。
这样看,逻辑上执行效果是跟加括号一样的。
但是当while进行过若干次循环后,c的当前值肯定不是空格,而getchar()为空格时,c又不会被赋值,所以c保留原当前值,这样循环会无限制的进行下去,因为空格中断循环控制已经无效了。
另外,就算是第一次循环判断用getchar=空格的话,c没有赋值,也不能保证c的默认初值就是空格,所以也很有可能中断循环无效。
所以,还是原来的程序正确。去掉括号的改法,如上文所述,问题相当大。
上次由 微风成长 在 2009-11-13 11:35,总共编辑 1 次。
- 微风成长
- 帖子: 644
- 注册时间: 2008-12-14 18:43
- 联系:
Re: 求助:一个C语言学习过程中的习题
补充:
刚验证了一下,getchar()!='\n'的值在非'\n'的输入时,值为1;在'\n'时为0.由下列程序验证:
同时说明只把printf("%d\n",n);改为n-1是永远得不到正确结果的。
刚验证了一下,getchar()!='\n'的值在非'\n'的输入时,值为1;在'\n'时为0.由下列程序验证:
代码: 全选
#include <stdio.h>
main()
{
long c;
c=getchar()!='\n';
printf("%d\n",c);
}