- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 C++ Practical Programming by Example by Andrew Koenig (Author)并在 4.1.3 Reading homework grades
章节中,有这个片段:
istream& read_hw(istream& in, vector<double>& hw){
//if(in){ /* HOW can be istream be used as bool in condition? -> commented out, this is not needed */
//hw.clear(); /*WHY to clear vector, when every instance is used only once? -> commented out, not needed*/
double x;
while(cin >> x)
hw.push_back(x);
//in.clear(); /* why to clear istream from error state, when if wrong value is passed, it is ignored anyway -> commented out*/
//} /* this is connected with the if-block */
return in; /*how is now in(istream) modified? where is binding between `std::cout` and `in`?? */
}
我有几个问题:
in
是如何修改的)true
如果 std::basic_ios::good
的值但是,根据文档,参数中的 istream 是新实例,因此在调用它之前不应该有任何错误状态,因此 if 子句是多余的。std::cout
怎么样与 in
相关联?书中的引文:We don't know the details of how cin works, but presumably the librarydefines it as a data structure that stores everything the library needs to know about the state of ourinput file. Reading input from the standard input file changes the state of the file, so it should logically change the value of cin as well.
std::cin
缓冲区确实是从键盘单词的输入修改的(由空格分隔),但是
std::cout
之间的连接在哪里?和
in
, 只有
while(cin >> x)
它修改了
cin
, 但是
cin
知道将这些数据复制到另一个缓冲区中
in
?或者
in
的目的是什么?当该函数的唯一目的是填充 vector 时?我想这与返回现在“修改”的方式有某种联系
in
最后,但我无法真正看到这两个缓冲区之间的联系。
//
注释是指我认为不需要的原始代码的一部分,如果编译,它仍然可以工作,所以它确实是不需要的。
/**/
解释了为什么我认为不需要
c
.
最佳答案
- return value : Why does the function have
istream
type as return value? Why is not the function void?
istream&
允许链接,如下所示:
std::string name;
read_hw(cin, gradevec) >> name;
这将放置从
cin
收到的第一个非 double 值进入
name
多变的。诚然,这是一个人为的例子,不是最易读的,但它确实展示了它是如何工作的。
if(in)
: as in comments, I know it could have true value ifstd::basic_ios::good
according to documentation, however, the istream in parameter is fresh instance
&
中的 & 符号
istream& in
表示)。
hw.clear()
: again, there is no need to clear the vector. It is a fresh instance, it was nowhere populated before in the program, so why to do this?
vector<double>&
) 的引用。 C没有这样的引用,它只有指针,所以
this answer可以帮助您更好地了解正在发生的事情。
in.clear()
: this one is really bother me. Is this even essential to do in non-parallel process? I can think of one case when to clear buffer and that is when fatal error occur.
in.clear()
有点令人困惑的是不会清除整个缓冲区,它只是
clears the various state flags像
failbit
或
badbit
你不想留下来并导致 future 的 I/O 操作失败。
- The last one - how is
std::cout
connected within
?
while(in >> x)
.否则,使用
in
毫无意义。一点也不。
关于c++ - istream std::cin 如何修改自定义 istream 缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62721248/
我使用 cin.peek() 方法获得了这段代码。我注意到奇怪的行为,当程序输入看起来像 qwertyu$[Enter] 时,一切正常,但是当它看起来像 qwerty[Enter]$ 时,它仅在我键入
#include #include using namespace std; int main(){ ofstream fout("student.dat",ios::out); char name[
我是 C++ 编程新手,遇到了障碍。这是我的代码: #include using namespace std; int main(){ int sum = 0, a; cout >
我有一个简单的程序,当输入完全符合预期时,它名义上可以工作。 #include using namespace std; int main () { int a, b; char a
int main () { int num1, num2; int cnt = 1; if (cin >> num1){ while (cin >> num2){
我有这个程序,但 cin 随机跳过..我的意思是有时它会,有时它不会。有什么解决办法吗? int main(){ /** get course name, number of
我是一名正在准备期末考试的 C++ 初学者。我用两种方式写了一个程序。第一个代码使用 cin.getline() 并且不能正常工作。第二个代码使用 cin.get() 和 cin >> 并正确执行所有
据我所知,在 cin 之后使用 getline() 时,我们需要先刷新缓冲区中的换行符,然后再调用 getline(),我们通过调用 cin.ignore() 来完成此操作。 std::string
我正在尝试以下代码: int main() { char str1[20]; int a; cout > a; cout > 忽略空格(即 ' ', '\t', '\n
我刚开始阅读 C++ 11 入门书,目前在 if 语句部分。我以前有使用 Java 的经验,但 C++ 输入/输出确实让我感到困惑。为了方便起见,我将多个练习放在一个文件中。但是,似乎自从我调用了 w
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: c++ cin input not working? 我一直在尝试使用以下 C++ 代码在整数后输入字符串。
需要 I/O 重定向,我不能使用 fstream。我用 I/O通过使用 ">line)通过 I/O 读取文件重定向。然后我需要 cin>>x ,但这次是在运行时进行用户输入,但会被跳过。 我试过了 c
我正在尝试使用 getline() 但在输入第一个记录光标后不要等待第二个国家/地区名称,它会跳过并跳转到首都名称。我的错误在哪里。如果我输入 国家:印度 首都:德里 Capita:57382 它可以
我有以下循环。它应该读取数字直到 EndOfFile,或者用户输入 -999 int arr[100]; int index; for (index = 0; index > arr[index];
以下两个循环和每个循环什么时候停止有什么区别? #include #include #include using namespace std; int main() { int x,y;
在这个程序的每次输入中,我希望用户能够输入他们想要的任意数量的“单词”(意思是用空格/制表符分隔的文本)......但是不允许用户输入单词超出当前 cin。例如:如果我键入 John Smith Do
int main() { int oddeven = 1; int modulotwo; // Simple loop since no reason to check 0
我写了一个 switch 语句,并创建了一个默认值,它会简单地说用户选择了一个错误的选项并重复输入。我想确保如果出现问题,它会首先清除缓冲区,所以我使用了 cin.sync(),但输入 'a' 仍然会
我是一个新手程序员,正在练习下面的这个程序。无论出于何种原因,在我的程序结束时,cin.ignore() 被编译器完全跳过并直接移动到 cin.get(),但是之前已经有一个按键,所以编译器完全跳过它
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我是一名优秀的程序员,十分优秀!