我使用以下代码:
#include <stdio.h>
#include <iostream>
using namespace std;
int main ()
{
char c ;
c = cin.get() ;
do {
cout.put(c) ;
c = cin.get() ;
} while ( !cin.eof()) ;
cout << "coming out!" << endl;
return 0;
}
上面代码的问题是,它没有脱离循环,这意味着它不会“打印出来”。任何人都可以帮忙为什么会这样?我在mac和linux上测试这个程序。
由于
答案 0 :(得分:5)
如果获得文件结尾,它会打印出“”。如果使用
将文件重定向到循环,它将退出循环./program < file
或者通过点击ctrl + d(linux)或ctrl + z(dos)来自己发送文件结尾
答案 1 :(得分:3)
标准输入永不击中EOF,除非您按Ctrl + Z。
因此,cin.eof()
始终为假。
要解决此问题,请按 Ctrl + Z 发送文件结束字符。
或者,您可以更改条件。 (例如,while(c != '\n')
)
答案 2 :(得分:2)
在这里完美运行:)如果你在终端中运行它,你必须发送EOF到这个终端。在* nix上,这将是Control + D.不幸的是,我无法谈论Windows。
编辑:正如其他人所指出的那样:Ctrl + Z将是Windows发送EOF的方式。
答案 3 :(得分:1)
您需要按CTRL-Z来模拟EOF(文件结束)并退出循环。
如果你不按CTRL-Z,循环将继续运行。
答案 4 :(得分:0)
我要猜测一下意图,因为这个代码并没有什么问题,但它可能不是你想要的,并且还会建议一个while循环呃......而我正在使用它。
#include <stdio.h>
#include <iostream>
using namespace std;
bool is_terminator(char ch)
{
return ch != '\n' && ch != '\r';
}
int main ()
{
char ch;
while (cin.get(ch) && !is_terminator(ch) )
cout.put(ch);
cout << "coming out!" << endl;
}