C++ 在c++;,使用终端窗口读取文件后,如何使用标准输入?

C++ 在c++;,使用终端窗口读取文件后,如何使用标准输入?,c++,input,C++,Input,我有一个程序,我在其中读取数据文件以填充信息列表 (/myProgram

我有一个程序,我在其中读取数据文件以填充信息列表

/myProgram


在文件被读取后,我无法在终端窗口中获得标准输入(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
$cat fd_in.c
int main()
{
无符号字符buf[1024];
int字节读取;
bytesread=read(3,buf,sizeof(buf));
printf(“文件为%d字节\n”,字节读取);
bytesread=read(1,buf,sizeof(buf));
printf(“您输入了%d字节,\n”,字节读取);
}
$gcc fd_英寸c
美元/a.out 3
/myProgram
意味着标准输入将来自
dataFile.dat
,而不是来自键盘。因此,如果您像这样运行程序,您将无法从标准输入读取键盘数据。虽然标准输入/输出易于使用,并使程序适合管道等,但当您的程序只有一个输入和/或一个输出时,它们最自然地工作。如果您的输入来自两个不同的来源,那么您应该使用
ifstream
,让程序显式地打开文件并从中读取。这样,从
cin
仍可以使用键盘输入


另外,检查您的读取是否成功是一个好主意。如果您这样做了,您会看到,由于到达文件末尾,文件完成后从
cin
读取的所有内容都会失败。

您是如何填充信息列表的?您是否使用ifstream读取数据文件,然后将值存储到可以使用iostream打印出来的字符串或数组中?是否要发布一些源代码来执行此操作?这通常不是真的。一个很好的例子是
openssl
,它允许您指定使用哪个fd向其提供各种数据。这允许您运行
openssl
,而无需将所有类型的临时文件写入磁盘或将所有数据放在命令行上。这很好,但我认为在这种情况下这是过分的。还有,我所说的哪一部分通常是不正确的?如果你的输入来自两个不同的来源,那么你应该让你的程序显式地打开文件并从中读取。出于好奇,3<做什么?它将文件重定向到文件描述符3,您可以在
main
中的第一个
read
中看到它被显式读取。准确地说,您也可以使用
3>
4>
等重定向多个输出流。