0

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

( ./myProgram < dataFile.dat)

读取文件后,我无法在该终端窗口中使标准输入(cin)工作,它永远不会有机会输入输入,而只是跳过它很可能会抓取一些要存储的随机值。是读取上面列出的文件后,有什么方法可以利用 cin 吗?

4

2 回答 2

1

根据您的 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
于 2013-02-15T00:06:33.813 回答
0

./myProgram < dataFile.dat意味着标准输入将来自dataFile.dat,而不是来自键盘。因此,如果您像这样运行程序,您将无法从标准输入中读取键盘数据。虽然标准输入/输出易于使用并使程序适合管道等。当您的程序具有单个输入和/或单个输出时,它们最自然地工作。如果您的输入来自两个不同的来源,就像您的情况一样,那么您应该让您的程序显式打开文件并从中读取,使用ifstream. 这样,键盘输入仍然可以从cin.

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

于 2013-02-15T00:07:35.893 回答