0
編輯:我在代碼中有一個愚蠢的錯誤,並解決了這個問題,所以現在事情是可以解釋的。我相應地更新了我的帖子。檢查stdin/std :: cin是否支持尋求
以下代碼顯示在行緩衝區內尋找工作。
首先,結果當管道東西進入程序。
$ echo 'asdf' | ./seektest
stdin does not support fseek()
c == s
std::cin does not support seekg()
Second read to std::cin failed!
c == ?
Second read to std::cin failed!
c == ?
其次,我輸入「a [enter] s [enter] d [enter] f [enter]」。
$ ./seektest
a
stdin supports fseek().
s
c == s
std::cin supports seekg().
d
c == d
c ==
第三,我打字 「ASDF」 每個getc
/get()
通話。
$ ./seektest
asdf
stdin supports fseek().
asdf
c == a
std::cin supports seekg().
asdf
c == a
c == s
尋求似乎在行緩衝區內工作。
這是代碼。
#include <iostream>
#include <cstdio>
int main(int argc, char ** argv)
{
// Try cstdio.
int x = fgetc(stdin);
if (x < 0) {
fprintf(stderr, "First read to stdin failed!.");
}
int res = fseek(stdin, -1, SEEK_CUR);
if (!res) {
fprintf(stdout, "stdin supports fseek().\n");
} else {
fprintf(stdout, "stdin does not support fseek()\n");
}
x = fgetc(stdin);
if (x < 0) {
fprintf(stderr, "Second read to stdin failed!\n");
}
char c = x;
fprintf(stdout, "c == %c\n", c);
// Try iostream.
x = std::cin.get();
if (std::cin.fail()) {
fprintf(stderr, "First read to std::cin failed!\n");
}
std::cin.seekg(-1, std::ios::cur);
if (std::cin.fail()) {
fprintf(stdout, "std::cin does not support seekg()\n");
} else {
fprintf(stdout, "std::cin supports seekg().\n");
}
c = std::cin.get();
if (std::cin.fail()) {
fprintf(stderr, "Second read to std::cin failed!\n");
}
fprintf(stdout, "c == %c\n", c);
c = std::cin.get();
if (std::cin.fail()) {
fprintf(stderr, "Second read to std::cin failed!\n");
}
fprintf(stdout, "c == %c\n", c);
return 0;
}
哎呀,你是對的。抱歉。 – Manuel 2011-03-17 08:39:21