鱼C论坛

 找回密码
 立即注册
查看: 3352|回复: 9

这个语句是什么意思啊?求解

[复制链接]
发表于 2011-8-1 20:29:01 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 吖查 于 2011-8-2 18:12 编辑
#include <stdio.h>
#define IN 1
#define OUT 0
int main(void)
{
int c, i, nwhite, nother;
int ndigit[10];
nwhite = nother =0;
for(i=0;i<10;++i)
  ndigit[i]=0;
while((c=getchar())!=EOF)
  if(c>='0'&&c<='9')
   ++ndigit[c-'0'];                                     //这个代码是什么意思啊?
  else if(c==' ' || c=='\n' || c=='\t')
   ++nwhite;
  else 
   ++nother;
printf("digits=");
for(i=0;i<10;++i)
  printf("%d ",ndigit[i]);
printf(", white spance = %d, other = %d\n",nwhite,nother);
return 0;
}
  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 20:38:00 | 显示全部楼层
这个应该是C现代方法里的例子吧。

ndigit[0] = 0
ndigit[1] = 0
.......
ndigit[9] = 0

当输入 011会变成
ndigit[0] = 1
ndigit[1] = 2
ndigit[2] =0
....
ndigit[9] = 0

就是统计输入数字的次数 空格的次数

-----------------------------------------
补充点资料

#include <stdio.h>
int main()
{
char c;    /* 改成:int c 就正确了 */

    while( ( c = getchar() ) != EOF )
    {
        putchar( c );
    }

    return 0;
}
getchar函数在一般情况下返回的是标准输入文件中的下一个字符,当没有输入时返回EOF(一个在头文件stdio.h中被定义的值,不同于任何一个字符)。这个程序乍一看似乎把标准输入复制到标准输出,实则不然。

原因在于程序中的变量c被声明为char类型,而不是int类型。这意味着c无法容下所有可能的字符,特别是,可能无法容下EOF。因此,最终结果存在以下几种可能:
1、某些合法的输入在被截断后,使得c的取值和EOF相同;这时程序将在文件复制的中途终止;
2、c根本不可能取到EOF这个值;这时程序陷入死循环;
3、程序表面上似乎能够正常工作,但完全是因为巧合。尽管函数getchar的返回结果在赋值给char类型的变量c时会发生“截断”操作,尽管while语句中比较运算的操作数不是函数getchar的返回值,然而令人惊讶地是许多编译器对上述表达式的实现并不正确。这些编译器确实对函数getchar的返回值做了截断处理,并把低端直接部分赋给了变量c。但是,它们在比较表达式中并不是比较c与EOF,而是比较getchar函数的返回值与EOF,编译器如果采取这种做法,上面的例子程序看上去就能够“正常”运行了。
摘自C缺陷陷阱。。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 20:44:04 | 显示全部楼层
新手报到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 21:37:10 | 显示全部楼层
还没学习到那呢,看不懂,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 23:45:33 | 显示全部楼层
路过,看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 10:52:51 | 显示全部楼层
过一段时间再来看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 13:17:31 | 显示全部楼层
while((c=getchar())=!EOF)
  if(c>='0'&&c<='9')
   ++ndigit[c-'0'];      
我们从标准输入的是字符类型!c是一个字符类型,要想让它做下标,必须转换为整形数字,c-'0'可以把一个字符型的数字 转换为一个整形数字,然后用这个这个数字做ndigit的下标,来统计输入字符中,每个数字出现的次数
0的ascii码是60,楼主可以随便用一个数字的ascii码减去0看得到的是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-2 18:11:45 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-2 18:14:40 | 显示全部楼层
zfzhuman123 发表于 2011-8-2 13:17
while((c=getchar())=!EOF)
  if(c>='0'&&c

嗯嗯~完全明白~~~~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-2 18:15:16 | 显示全部楼层

一起加油!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-8 12:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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