鱼C论坛

 找回密码
 立即注册
查看: 5540|回复: 13

为什么程序运行后没有结果?程序出问题了吗?

[复制链接]
发表于 2013-9-10 11:58:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:
输入一行字符,分别统计出其中的英文数字,空格,数字和其他字符。
程序如下:
#include<stdio.h>  
int main()
{   
char c;
int letter=0,space=0,digit=0,other=0;
printf("输入一行字符:  ");        
    c=getchar();
  while (c!='\n')
  {
   if (c>='a' && c<='z' || c>='A' && c<='Z')
    letter++;
      else if (c==' ')
   space++;  
      else if (c>='0' && c<='9')
   digit++;
      else  
   other++;
  }
  printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符:%d\n",letter,space,digit,other);
  return 0;g
}

为什么运行以后程序不给出答案,下面这图是我运行程序后,随意输出字母然后按下回车的结果。 没有给出答案,按其他键也没反应,不知道为什么了。
25852.jpg
还有就是求解释下为什么红色标注的地方就可以求数数字的个数了?谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-10 12:25:57 | 显示全部楼层
while陷入死循环了,getchar只会获取一个字符,比如你例子里面的开始的'd','d'!='\n'恒成立。所以没有任何反应。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-10 20:53:06 | 显示全部楼层
2楼说得很清楚
要使得c每次都获得下一个字符,所以while代码段最后要加:c=getchar();
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-10 21:33:40 | 显示全部楼层
同楼上。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-10 22:44:00 | 显示全部楼层
while('\n'==(c=getchar())){}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-10 22:59:29 | 显示全部楼层
int letter=0,space=0,digit=0,other=0; //定义及初始化了4个整型变量作为4类字符的计数器
      else if (c>='0' && c<='9')//关于ASCII码和char类型,'0'=48;'9'=57;
   digit++;//判定为数值字符,digit=digit+1;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-10 23:11:07 | 显示全部楼层
用字符数组吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-11 09:56:08 | 显示全部楼层

哦~~我明白了,我一直不明白为什么(c>='0' && c<='9')就可以求出数字 是因为我想假如我输入的数不是一位的呢,比如我输入956,它这个怎么判断呢。却忘了c是读取一位数而已,这样我就能明白其中的道理了。谢谢谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-11 09:57:31 | 显示全部楼层
压寨宝宝 发表于 2013-9-10 12:25
while陷入死循环了,getchar只会获取一个字符,比如你例子里面的开始的'd','d'!='\n'恒成立。所以没有任何 ...

怪不得我说怎么输入都没反应呢。那我要输入一串字符是不是把c=getcgar()再添加在循环体的最后呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-11 10:03:57 | 显示全部楼层
HeartMark 发表于 2013-9-10 22:59
int letter=0,space=0,digit=0,other=0; //定义及初始化了4个整型变量作为4类字符的计数器
      else if  ...

这个我没注意到,学到了。
老是忽略getchar是获取字符,而不是数字。
谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-11 10:06:17 | 显示全部楼层
压寨宝宝 发表于 2013-9-10 12:25
while陷入死循环了,getchar只会获取一个字符,比如你例子里面的开始的'd','d'!='\n'恒成立。所以没有任何 ...

未命名12132123.jpg 哈哈,我成功了!我把c=gechar();添加在了循环体的最后部分,实验成功,意料之中,成功告破此问题!谢谢谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-11 10:06:59 | 显示全部楼层
tsembrace 发表于 2013-9-10 20:53
2楼说得很清楚
要使得c每次都获得下一个字符,所以while代码段最后要加:c=getchar();

哈哈,我成功了!我把c=gechar();添加在了循环体的最后部分,实验成功,谢谢你的回答谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-11 22:31:08 | 显示全部楼层
With_You 发表于 2013-9-11 09:56
哦~~我明白了,我一直不明白为什么(c>='0' && c

是字节不是位
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-12 01:23:21 | 显示全部楼层
while死循环了。你仔细想想 输入一个非空字符,是不是一直在哪里循啊循的。

用数组吧。假如没有学习到的话。break想想他的作用??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-6 07:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表