标题:有关缓冲区的事情
只看楼主
Knightl8
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2020-3-8
结帖率:87.5%
已结贴  问题点数:10 回复次数:8 
有关缓冲区的事情
不是很明白有关输入输出缓冲区的原理,麻烦大佬讲讲
搜索更多相关主题的帖子: 输入 输出 原理 缓冲区 
2020-03-24 13:49
maomao12345
Rank: 2
来 自:五位神奇空间
等 级:禁止访问
威 望:2
帖 子:127
专家分:64
注 册:2020-3-23
得分:4 
https://
去看看吧

一个快乐的小小孩
2020-03-24 13:59
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:4 
stdin/stdout 由进程创建并分配内存作为缓冲区
缓冲区指针保存在stdin/stdout的某个数据成员里面

调用scanf/getchar等函数
如果缓冲区是空的 进程会暂停 等待输入
输入数据会写入stdin缓冲区
然后 scanf/getchar等函数会从缓冲区获取这些输入数据

调用printf/putchar 等函数
会把数据写入stdout缓冲区
等到触发特定条件 就把缓冲区里面的数据全部输出

备注 特定条件详细情况 请搜索 无缓冲/行缓冲/满缓冲
收到的鲜花
  • 叶纤2020-03-24 14:45 送鲜花  1朵   附言:🌹

https://zh.
2020-03-24 14:00
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:4 
回复 3楼 lin5161678
大大想问你个问题?
1,stdout会不会接受null呢?也就是' /0'
2如果接收那在缓冲区是一个什么形态的地址
当然不回答也是可以的

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-24 14:17
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
以下是引用叶纤在2020-3-24 14:17:26的发言:

大大想问你个问题?
1,stdout会不会接受null呢?也就是' /0'
2如果接收那在缓冲区是一个什么形态的地址
当然不回答也是可以的

槽点较多 null 不是 '\0'
缓冲区写入不做限制 能写入 '\0'
缓冲区接受不是地址 更谈不上形态
缓冲区保存的是数据 要输出 123
stdout 保存的数据就是'1' '2' '3'
写入'\0'
缓冲区保存的数据就是 '\0'

https://zh.
2020-03-24 14:24
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
有点晕/和\这个号,下次我会注意的
谢谢啦

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-24 14:41
Knightl8
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2020-3-8
得分:0 
回复 3楼 lin5161678
程序代码:
#include <iostream>
using namespace std;
int main() {
    string password, temp;
    int n, cnt = 0;
    cin >> password >> n;
    getchar();   //老哥,请问为啥要用getchar()呢
    while(1) {
        getline(cin, temp);
        if (temp == "#") break;
        cnt++;
        if (cnt <= n && temp == password) {
            cout << "Welcome in";
            break;
        } else if (cnt <= n && temp != password) {
            cout << "Wrong password: " << temp << endl;
            if (cnt == n) {
                cout << "Account locked";
                break;
            }
        }
    }
    return 0;
}

2020-03-24 15:01
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
回复 7楼 Knightl8
根本不应该用getchar
应该用 cin.ignore();

https://zh.
2020-03-24 15:08
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-24 15:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500548-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.201860 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved