当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 10 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 求助:一个C语言学习过程中的习题
帖子发表于 : 2009-03-04 21:48 
头像

注册: 2008-12-14 18:43
帖子: 644
送出感谢: 0 次
接收感谢: 0 次
编写一个用于统计即时输入一段文字的空格的数目。最好能提供整个程序,虽然我遇到的问题只是不知道在程序中怎样表示空格。谢谢。


_________________
微风成长
http://breezegrowing.com


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 求助:一个C语言学习过程中的习题
帖子发表于 : 2009-03-04 23:40 
头像

注册: 2008-11-29 22:56
帖子: 578
地址: Guangdong Pharmaceutical University
送出感谢: 0 次
接收感谢: 0 次
通过ASCII来判断


_________________
猪圈里的猪想着去解放全世界


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 求助:一个C语言学习过程中的习题
帖子发表于 : 2009-03-04 23:57 
头像

注册: 2007-11-29 9:41
帖子: 8455
送出感谢: 0 次
接收感谢: 0 次
就是空格啰,呵呵


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 求助:一个C语言学习过程中的习题
帖子发表于 : 2009-03-05 0:02 
头像

注册: 2007-09-26 17:34
帖子: 618
送出感谢: 0 次
接收感谢: 2
#include<stdio.h>
int main()
{
char *str="i am superman";
int i=0,n=0;
for(i=0;*(str+i)!='\0';i++)
if(str[i]==' ')
n++;
printf("n=%d\n",n);
return 0;
}


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 求助:一个C语言学习过程中的习题
帖子发表于 : 2009-03-05 0:16 
头像

注册: 2008-02-15 0:09
帖子: 852
送出感谢: 0 次
接收感谢: 0 次
LZ说的是即时输入,LS的还要加个 scanf 改一下,


_________________
Somebody think they are full of niubility, so they play a zhuangbility, but only reflect their shability.


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 求助:一个C语言学习过程中的习题
帖子发表于 : 2009-03-05 0:49 
头像

注册: 2007-09-26 17:34
帖子: 618
送出感谢: 0 次
接收感谢: 2
ebok 写道:
LZ说的是即时输入,LS的还要加个 scanf 改一下,

我试过了,scanf遇到空格就终止了


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 求助:一个C语言学习过程中的习题
帖子发表于 : 2009-03-06 18:44 
头像

注册: 2008-12-14 18:43
帖子: 644
送出感谢: 0 次
接收感谢: 0 次
谢谢大家的帮助。

我已经写了一个管用的程序,如下:
代码:
#include <stdio.h>
int main()
{
        long c,n;
        n=0;
        while((c=getchar())!='/n')
                 if (c=='  ')
                 ++n;
        printf("%d\n",n);
}

经测试在输入一段文字后,按“Enter”键 程序将自动计算其中的空格数目。


4楼Windwinny的程序中,for这句:
“for(i=0;*(str+i)!='\0';i++)”和“if(str[i]==' ')”中的
'*(str+i)'、'\0'、'str[i]',不太明白是什么意思。
可能是还没学到这些概念吧,因为我还在学习中……
:em27


_________________
微风成长
http://breezegrowing.com


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 求助:一个C语言学习过程中的习题
帖子发表于 : 2009-03-06 19:23 
头像

注册: 2007-01-06 21:00
帖子: 920
送出感谢: 2
接收感谢: 0 次
微风成长 写道:
谢谢大家的帮助。

我已经写了一个管用的程序,如下:
代码:
#include <stdio.h>
int main()
{
        long c,n;
        n=0;
        while((c=getchar())!='/n')
                 if (c=='  ')
                 ++n;
        printf("%d\n",n);
}

经测试在输入一段文字后,按“Enter”键 程序将自动计算其中的空格数目。


4楼Windwinny的程序中,for这句:
“for(i=0;*(str+i)!='\0';i++)”和“if(str[i]==' ')”中的
'*(str+i)'、'\0'、'str[i]',不太明白是什么意思。
可能是还没学到这些概念吧,因为我还在学习中……
:em27


这个要不明白还是继续深入学习吧,这才是C的精华所在,虽然只是精华的皮毛

代码:
 while((c=getchar())!='/n')

你这句的顺序是先get字符,然后赋值给c,然后比较,所以回车会赋值给c,你可以这样

代码:
  printf("%d\n",n);

变成
代码:
  printf("%d\n",n-1);

或者
代码:
 while(c=getchar()!='/n')

按照教科书上,c=getchar()必须引起来的,因为赋值的优先度低,但是“错误”的方法有时 能做正确的事情

你试试吧,好久不动C了


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 求助:一个C语言学习过程中的习题
帖子发表于 : 2009-03-06 22:51 
头像

注册: 2008-12-14 18:43
帖子: 644
送出感谢: 0 次
接收感谢: 0 次
明白你的意思。但是很反对你的观点。
代码:
while((c=getchar())!=' '

是先把输入的字符赋值给c,不管它是不是空格都给c。所以,当c等于空格时,就中断循环。
而你的意思是,输入的字符要是空格的话,就不赋值给c,因此,这时c就没有值,所以就中断循环。
这样看,逻辑上执行效果是跟加括号一样的。
但是当while进行过若干次循环后,c的当前值肯定不是空格,而getchar()为空格时,c又不会被赋值,所以c保留原当前值,这样循环会无限制的进行下去,因为空格中断循环控制已经无效了。
另外,就算是第一次循环判断用getchar=空格的话,c没有赋值,也不能保证c的默认初值就是空格,所以也很有可能中断循环无效。
所以,还是原来的程序正确。去掉括号的改法,如上文所述,问题相当大。


_________________
微风成长
http://breezegrowing.com


最后由 微风成长 编辑于 2009-11-13 11:35,总共编辑了 1 次

页首
 用户资料  
 
10 楼 
 文章标题 : Re: 求助:一个C语言学习过程中的习题
帖子发表于 : 2009-03-07 16:28 
头像

注册: 2008-12-14 18:43
帖子: 644
送出感谢: 0 次
接收感谢: 0 次
补充:
刚验证了一下,getchar()!='\n'的值在非'\n'的输入时,值为1;在'\n'时为0.由下列程序验证:
代码:
#include <stdio.h>
main()
{
        long c;
        c=getchar()!='\n';
        printf("%d\n",c);
}

同时说明只把printf("%d\n",n);改为n-1是永远得不到正确结果的。


_________________
微风成长
http://breezegrowing.com


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 10 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译