返回信息流程序如下:
#include<iostream>
using namespace std;
int main(){
//char c;
int c;
cout<<EOF<<endl;
while((c = getchar()) != EOF)
{
putchar(c);
}
return 0;
}
请问,为什么EOF为-1,c也为-1,但是还是死循环呢?我用的编译器是C-free。
这是一条镜像帖。来源:北邮人论坛 / cpp / #80297同步于 2014/6/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求解 C++ int转为char时的数据丢失问题
liuxuerui
2014/6/19镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
getchar返回类型是int,为什么要自找麻烦用char变量来做一次自动类型转换,各种类型转换都是有坑的。
至于原因应该是你的系统上char 默认为unsign char,getchar返回-1后自动转换成unsign char 肯定不是-1了。
程序输入EOF没有?
键盘输入时win 下ctrl+z,linux下ctrl+d。
【 在 liuxuerui 的大作中提到: 】
: 可是我已经把变量c改为int 也不对。
: 通过『我邮2.0』发布
谢谢大牛,已解决。
【 在 sigmund 的大作中提到: 】
: 程序输入EOF没有?
: 键盘输入时win 下ctrl+z,linux下ctrl+d。
getchar()返回的就是一个int,而int型是2个字节,所以当要对getchar()进行输入时,直接输入-1,就OK。但是char型是一个字节,这样,当getchar()返回给char时,就会丢失一个字节,所以不要把c定义为char,而是定义为int。
【 在 gdl 的大作中提到: 】
: 我想知道,你是怎么让c为-1的
我猜你就是直接输入-1。其实,getchar函数的返回值是用户输入的字符的ASCII码,出错才会返回-1。你输入“-1”,那么在输入流中实际上是3个字符‘-’‘1’‘\n’,在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。你输入‘-1’其实不是数字-1
你想多了!额
【 在 gdl 的大作中提到: 】
: 我猜你就是这样……。getchar函数的返回值是用户输入的字符的ASCII码,出错才会返回-1。你输入“-1”,那么在输入流中实际上是3个字符‘-’‘1’‘\n’,在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。你输入‘-1’其实不是数字-1