我有一个程序,我在其中读取数据文件以填充信息列表
( ./myProgram < dataFile.dat
)
读取文件后,我无法在该终端窗口中使标准输入(cin)工作,它永远不会有机会输入输入,而只是跳过它很可能会抓取一些要存储的随机值。是读取上面列出的文件后,有什么方法可以利用 cin 吗?
根据您的 shell 环境,您可以将文件输入到另一个 fd,而不是 stdin:
$ cat fd_in.c
int main()
{
unsigned char buf[1024];
int bytesread;
bytesread = read(3,buf,sizeof(buf));
printf("file is %d bytes\n",bytesread);
bytesread = read(1,buf,sizeof(buf));
printf("you entered %d bytes\n",bytesread);
}
$ gcc fd_in.c
$ ./a.out 3< fd_in.c
file is 220 bytes
my input!
you entered 10 bytes
./myProgram < dataFile.dat
意味着标准输入将来自dataFile.dat
,而不是来自键盘。因此,如果您像这样运行程序,您将无法从标准输入中读取键盘数据。虽然标准输入/输出易于使用并使程序适合管道等。当您的程序具有单个输入和/或单个输出时,它们最自然地工作。如果您的输入来自两个不同的来源,就像您的情况一样,那么您应该让您的程序显式打开文件并从中读取,使用ifstream
. 这样,键盘输入仍然可以从cin
.
另外,最好检查一下您的读取是否成功。如果您这样做了,您会看到cin
文件完成后的所有读取都由于到达文件末尾而失败。