user-0 提问: 为什么《C程序设计语言》（Brain W.Kernigham著）中的程序很多都在vc++6.0中实现不了？

回复:
user: user-1
content: 引用 30楼moyac 的回复:[quote=引用 18 楼 weixin_41760634 的回复:] [quote=引用 15 楼 moyac 的回复:] [quote=引用 11 楼 weixin_41760634 的回复:] 我也想知道为什么实现不了，比如下面这个代码，就是1.6数组中的，我用vc6.0试了，vs2010也试了，能运行，就是实现不了书中说的结果。 #include <stdio.h> /* count digits, white space, others */ main() { 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 space = %d, other = %d\n", nwhite, nother); }  你说的这个例子，我看过，也试过，没有问题的，我也是新手，刚开始学，用的是devc++，比较简单一点[/quote] 我用的vc6.0，他们说Windows下这个比较简单，然后我用vs2010，他们说这个软件在Windows下强大，可我怎么运行后就表示不出书中说的这个结果呢，都折腾好几天了，另外还有一个例子也是这样。求解答，不然，我这个初学者看了书上写的这个程序都执行不到最后结果，都不知道怎么去学习，也不知道这个程序到底要怎么写才是对。[/quote]尴尬 刚开始学习的话，建议你下载一个devc++吧，比较便捷一点哦，先入入手[/quote]嗯嗯，谢谢

user: user-2
content: 引用 18 楼 weixin_41760634 的回复:[quote=引用 15 楼 moyac 的回复:] [quote=引用 11 楼 weixin_41760634 的回复:] 我也想知道为什么实现不了，比如下面这个代码，就是1.6数组中的，我用vc6.0试了，vs2010也试了，能运行，就是实现不了书中说的结果。 #include <stdio.h> /* count digits, white space, others */ main() { 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 space = %d, other = %d\n", nwhite, nother); }  你说的这个例子，我看过，也试过，没有问题的，我也是新手，刚开始学，用的是devc++，比较简单一点[/quote] 我用的vc6.0，他们说Windows下这个比较简单，然后我用vs2010，他们说这个软件在Windows下强大，可我怎么运行后就表示不出书中说的这个结果呢，都折腾好几天了，另外还有一个例子也是这样。求解答，不然，我这个初学者看了书上写的这个程序都执行不到最后结果，都不知道怎么去学习，也不知道这个程序到底要怎么写才是对。[/quote]尴尬 刚开始学习的话，建议你下载一个devc++吧，比较便捷一点哦，先入入手

user: user-1
content: 引用 22楼donjin9 的回复:必须ctrl+z回车明白了，谢谢

user: user-1
content: 引用 20楼幻夢之葉 的回复:[quote=引用 19 楼 weixin_41760634 的回复:] 我试过了，也不行 这是你的操作问题吧？ EOF是判断文件结束的，Windows下CTRL+Z，再Enter健是输入结束符[/quote]明白了，谢谢

user: user-1
content: 引用 14 楼 jianwen0529 的回复: while ((c = getchar()) != EOF) { if (c >= '0' && c <= '9') ++ndigit[c-'0']; else if (c == ' ' || c == '\n' || c == '\t') ++nwhite; else ++nother; } //加上大括号试试 printf("digits ="); 我试过了，也不行

user: user-1
content: 引用 15 楼 moyac 的回复:[quote=引用 11 楼 weixin_41760634 的回复:] 我也想知道为什么实现不了，比如下面这个代码，就是1.6数组中的，我用vc6.0试了，vs2010也试了，能运行，就是实现不了书中说的结果。 #include <stdio.h> /* count digits, white space, others */ main() { 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 space = %d, other = %d\n", nwhite, nother); }  你说的这个例子，我看过，也试过，没有问题的，我也是新手，刚开始学，用的是devc++，比较简单一点[/quote] 我用的vc6.0，他们说Windows下这个比较简单，然后我用vs2010，他们说这个软件在Windows下强大，可我怎么运行后就表示不出书中说的这个结果呢，都折腾好几天了，另外还有一个例子也是这样。求解答，不然，我这个初学者看了书上写的这个程序都执行不到最后结果，都不知道怎么去学习，也不知道这个程序到底要怎么写才是对。

user: user-3
content: 引用 19 楼 weixin_41760634 的回复:我试过了，也不行 这是你的操作问题吧？ EOF是判断文件结束的，Windows下CTRL+Z，再Enter健是输入结束符

user: user-1
content: 引用 26楼幻夢之葉 的回复:引用 23 楼 weixin_41760634 的回复:[quote=引用 22楼donjin9 的回复:]必须ctrl+z回车ctrl+z会再enter 就结束了 while循环的结束条件就是那个[/quote]这个程序是用来统计输入字符中数字，空白符，其他字符出现的次数的。要是一运行，就按你说的操作，那这个程序写来有何用？

user: user-3
content: 引用 23 楼 weixin_41760634 的回复:引用 22楼donjin9 的回复:必须ctrl+z回车ctrl+z会再enter 就结束了 while循环的结束条件就是那个

user: user-1
content: 引用 17楼流浪小狗 的回复:getchar的行为和回车换行的处理有关系吧！ windows下，\n\r是回车换行，而老外的程序估计基于unix或者linux，是\n 这样，在控制台格式化输入时，因为多了\r，结果逻辑不对了。  记得ACM比赛时，为了不出现这种问题，都是先 fgets一行，再 sscanf来做保险。或者你教教我要怎么才能在vs下运行，这样以后我碰到书中的例子都执行不了结果的时候就不用在范愁了，谢谢

user: user-1
content: 引用 17楼流浪小狗 的回复:getchar的行为和回车换行的处理有关系吧！ windows下，\n\r是回车换行，而老外的程序估计基于unix或者linux，是\n 这样，在控制台格式化输入时，因为多了\r，结果逻辑不对了。  记得ACM比赛时，为了不出现这种问题，都是先 fgets一行，再 sscanf来做保险。那你的意思是这个程序只能在Unix 或者linx 系统下执行了？

user: user-1
content: 引用 22楼donjin9 的回复:必须ctrl+z回车ctrl+z会再enter 就结束了

user: user-4
content: 必须ctrl+z回车

user: user-1
content: 引用 20 楼 jianwen0529 的回复:[quote=引用 19 楼 weixin_41760634 的回复:] 我试过了，也不行 这是你的操作问题吧？ EOF是判断文件结束的，Windows下CTRL+Z，再Enter健是输入结束符[/quote] 我没有按ctrl+z啊，我是输入完成后直接按得enter

user: user-5
content: getchar的行为和回车换行的处理有关系吧！ windows下，\n\r是回车换行，而老外的程序估计基于unix或者linux，是\n 这样，在控制台格式化输入时，因为多了\r，结果逻辑不对了。  记得ACM比赛时，为了不出现这种问题，都是先 fgets一行，再 sscanf来做保险。

user: user-6
content: 引用 10 楼 lm_whales 的回复:引用 5 楼 sholber 的回复:在中国，控制等级考试的人，以及大学教授，他们和微软公司的笔儿盖子在1995年达成协议，只有他们能用VC编译C程序，别人是不可以的。早该摆脱VC6了

user: user-1
content: 我也想知道为什么实现不了，比如下面这个代码，就是1.6数组中的，我用vc6.0试了，vs2010也试了，能运行，就是实现不了书中说的结果。 #include <stdio.h> /* count digits, white space, others */ main() { 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 space = %d, other = %d\n", nwhite, nother); }

user: user-2
content: 引用 11 楼 weixin_41760634 的回复:我也想知道为什么实现不了，比如下面这个代码，就是1.6数组中的，我用vc6.0试了，vs2010也试了，能运行，就是实现不了书中说的结果。 #include <stdio.h> /* count digits, white space, others */ main() { 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 space = %d, other = %d\n", nwhite, nother); }  你说的这个例子，我看过，也试过，没有问题的，我也是新手，刚开始学，用的是devc++，比较简单一点

user: user-3
content: while ((c = getchar()) != EOF) { if (c >= '0' && c <= '9') ++ndigit[c-'0']; else if (c == ' ' || c == '\n' || c == '\t') ++nwhite; else ++nother; } //加上大括号试试 printf("digits =");

user: user-3
content: 引用 12 楼 jianwen0529 的回复:结果不对那是逻辑问题，不是编译问题！ 为什么不对，那就需要你继续学习掌握程序分析的能力了！ 或者你该换一本教程？