请各位老师指点一下

wangweifb 2013-11-06 08:45:53
这是一个求输入字符数的程序,可是我编译组建之后执行,输入什么能让这个循环结束呢,一直输入得不到输出……????
引用
#include <stdio.h>

main()
{ long nc;
nc=0;
while(getchar() != EOF)
++nc;
printf("%ld\n",nc);
}
...全文
105 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Adol1111 2013-11-07
  • 打赏
  • 举报
回复
引用 1 楼 u012409770 的回复:
输入ctrl+z之后按下一个enter,getchar()就开始读取缓存中的数据,遇到下一个ctrl+z后退出了
你是在VS下运行的吧,并不是ctrl+z让程序退出了,是ctrl+z后退出了循环,然后快速执行完剩下语句,让程序结束了。你在main的最后加一句while(1);就可以了。按ctrl+z的确可以表示EOF,没什么问题。 看你样子是在看K&R的《C程序设计语言》,这本入门的话还是有难度的,加油吧。
wangweifb 2013-11-06
  • 打赏
  • 举报
回复
输入ctrl+z之后按下一个enter,getchar()就开始读取缓存中的数据,遇到下一个ctrl+z后退出了
赵4老师 2013-11-06
  • 打赏
  • 举报
回复
先按下Alt键,再按小键盘上的2、5、5,再抬起Alt键,输入ASCII码为255即0xFF的字符试试能不能让getchar()返回-1 我猜不行。
赵4老师 2013-11-06
  • 打赏
  • 举报
回复
#define getchar() getc(stdin) #define getc(_stream) fgetc(_stream) #define fgetc(_stream) (--(_stream)->_cnt >= 0 ? 0xff & *(_stream)->_ptr++ : _filbuf(_stream)) _filbuf调用read read参考
File: "C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\internal.h"
    69: #define CTRLZ 26        /* ctrl-z means eof for text */
File: "C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\read.c"
   277:                     if (*p == CTRLZ) {
   478:                     if (*pu == CTRLZ) {
做或不做 2013-11-06
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
[quote=引用 2 楼 u011779875 的回复:] EOF 的宏值是-1 当然输入-1 了
此乃真“扯”![/quote] getchar函数的返回值是用户输入的第一个字符的ASCII码 ASCII没有-1 故出错时返回-1 谁知道什么时候出错 1.某些合法的字符被“截断”了以后,恰好等于-1,导致程序在复制的过程中发生了中断。 2.前面的C不可能取值为EOF,导致程序产生了一个死循环。 我没看清楚
赵4老师 2013-11-06
  • 打赏
  • 举报
回复
引用 2 楼 u011779875 的回复:
EOF 的宏值是-1 当然输入-1 了
此乃真“扯”!
做或不做 2013-11-06
  • 打赏
  • 举报
回复
EOF 的宏值是-1 当然输入-1 了

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧