小地瓜重新去华容道工作 2022-10-10 11:54 采纳率: 100%
浏览 21
已结题

ubuntu18系统,read()从标准输入获取数据时,阻止read()前面的printf()打印数据,是什么原因?

ubuntu18系统,代码和程序运行如下,问题是:本意是, printf("请输入数据:");这一行应该先打印输出,然后再从键盘输入数据。但是运行结果显示是先从键盘输入数据,然后打印输出 "请输入数据:",这是什么原因呢?

#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main()
{
    // 获取从键盘输入的数据
    printf("请输入数据:");
    char buf[1024] = {0};
    ssize_t size = read(STDIN_FILENO, buf, sizeof(buf));
    printf("buf : %s\n", buf);
    printf("len : %ld\n", strlen(buf));
    printf("return size : %ld\n", size);
    return 0;
}

运行,hello world是键盘键入的内容

hello world
请输入数据:buf : hello world

len : 12
return size : 12
  • 写回答

1条回答 默认 最新

  • flypig哗啦啦 2022-10-10 12:40
    关注

    应该是你的终端被read占用,导致刚开始的printf不能打印,等你输入数据完毕,read操作完成,释放了终端,所以后面打印出来了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月26日
  • 已采纳回答 7月18日
  • 创建了问题 10月10日

悬赏问题

  • ¥100 复现论文:matlab仿真代码编写
  • ¥15 esp32驱动GC9A01循环播放视频
  • ¥15 惠普360g9的最新bios
  • ¥30 这个功能用什么软件发合适?
  • ¥60 微信小程序,取消订单,偶尔订单没有改变状态
  • ¥15 用pytorch实现PPO算法
  • ¥15 关于调制信号的星座图?
  • ¥30 前端传参时,后端接收不到参数
  • ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
  • ¥15 机器学习预测遇到的目标函数问题