我无法刷新标准输入。如何在 C 中刷新标准输入?

2024-04-21

How to 刷新标准输入??

为什么它在下面的代码片段中不起作用?

#include <string.h>
#include <stdio.h>
#include <malloc.h>
#include <fcntl.h>

int main() {
    int i = 0, j = 0, sat;
    char arg[256];
    char *argq;
    argq = malloc(sizeof(char) * 10);
    
    printf("Input the line\n");
    i = read(0, arg, sizeof(char) * 9);
    arg[i - 1] = '\0';
    fflush(stdin);
    
    i = read(0, argq, sizeof(char) * 5);
    argq[i - 1] = '\0';

    puts(arg);
    puts(argq);
    
    return 0;
}

现在,如果我输入 11 个字符,则只应读取 9 个字符,但 stdin 中的其余两个字符不会刷新并在 argq 中再次读取。为什么?

Input: 123 456 789

Output:

123 456
89

为什么我会得到这个89作为输出?


我相信 fflush 仅用于输出流。

你可以尝试fpurge http://www.manpagez.com/man/3/fpurge/ or __fpurge http://linux.die.net/man/3/__fpurge在 Linux 上。请注意,fpurge 是非标准且不可移植的。您可能无法使用它。

From a Linux fpurge 手册页 http://linux.die.net/man/3/fpurge:通常想要丢弃输入缓冲区是错误的。

刷新标准输入的最便携的解决方案可能是以下内容:

int c;
while ((c = getchar()) != '\n' && c != EOF);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我无法刷新标准输入。如何在 C 中刷新标准输入? 的相关文章

  • 使用 mono/nunit-console/4 在 Mac OS X 控制台上运行测试

    我安装了 Max OS X 10 11 1 上面装有 Xamarin 我编写了简单的测试类 只是为了测试在 Mac OS X 和 Ubuntu 上运行 Nunit 测试 该类实际上有一个返回字符串的方法 using System names
  • 何时使用 =default 使析构函数默认?

    尽管对构造函数使用 default 对我来说很清楚 即强制编译器在其他构造函数存在时创建默认构造函数 但我仍然无法理解这两种类型的析构函数之间的区别 那些使用 default 的 那些没有显式定义并由编译器自动生成的 我唯一想到的是 gro
  • 使用 Enumerable.OfType() 或 LINQ 查找特定类型的所有子控件

    Existed MyControl1 Controls OfType
  • EF Core 通过完全替换断开集合导航属性的更新

    使用 EF Core 5 0 我有一个 SPA 页面 可以加载Group实体及其集合Employee来自 API 的实体 var groupToUpdate await context Groups Include g gt g Emplo
  • ASP.NET Web API 客户端 ProgressMessageHandler Post 任务卡在 WinForm 应用程序中

    我在用着HttpClient and ProgressMessageHandler来自MS ASP NET Web API 客户端库 http nuget org packages Microsoft AspNet WebApi Clien
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • 与 Qt 项目的静态链接

    我有一个在 Visual Studio 2010 Professional 中构建的 Qt 项目 但是 当我运行它 在调试或发布模式下 时 它会要求一些 Qt dll 如果我提供 dll 并将它们放入 System32 中 它就可以工作 但
  • 指向特征矩阵的指针数组

    我在代码中使用 Eigen 的 MatrixXd 矩阵 在某个时刻我需要一个 3D 矩阵 由于 Eigen 没有三维矩阵类型 因为它仅针对线性代数进行了优化 因此我创建了一个 MatrixXd 类型的指针数组 Eigen MatrixXd
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 将标量添加到特征矩阵(向量)

    我刚刚开始使用 Eigen 库 无法理解如何向所有矩阵成员添加标量值 假设我有一个矩阵 Eigen Matrix3Xf mtx Eigen Matrix3Xf Ones 3 4 mtx mtx 1 main cxx 104 13 error
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • IEnumerable.Except 不起作用,那么我该怎么办?

    我有一个 linq to sql 数据库 非常简单 我们有 3 个表 项目和用户 有一个名为 User Projects 的连接表将它们连接在一起 我已经有了一个获得的工作方法IEnumberable
  • 将 char[][] 转换为 char** 会导致段错误吗?

    好吧 我的 C 有点生疏了 但我想我应该用 C 来做我的下一个 小 项目 这样我就可以对其进行抛光 并且我已经有不到 20 行的段错误了 这是我的完整代码 define ROWS 4 define COLS 4 char main map
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • 使用未定义常量 CRYPT_SHA512

    我使用一个 php 脚本 该脚本使用 php 的 crypt 并使用 SHA512 对密码进行哈希处理 但是当我尝试检查 SHA512 是否已设置时 出现上述错误 当然我知道为什么我会收到这个错误 php 缺少一些依赖项 我只是不知道这种依
  • 符号 __module_registered 错误的重复定义

    我从 GHCi 收到一条关于 符号 module registered 的重复定义 的错误消息 如下所示 GHCi runtime linker fatal error I found a duplicate definition for
  • 如何在 swift 中检查 JSON 是否为 null?

    我目前正在开发一个应用程序 它可以返回 json 格式如下 location subtype 某个值 位置类型 强制 月份 2015 01 结果状态 类别 某个值 日期 某个值 如果 outcome status 具有值 则显示类别和日期
  • 如何在flutter中设置macos应用程序的默认大小?

    我正在尝试使用 flutter 构建 macOS 桌面应用程序 我希望应用程序是全宽 边到边的 但是 当我通过模拟器运行应用程序时 或者在构建之后 它总是启动大小为 800x600 的应用程序 我已将根容器的高度和宽度设置为 double
  • 如何用Hibernate实现3个多对多关系?

    我不能 100 确定这只是一个 Hibernate 问题 因为这可能是一个更抽象的决定 但我会尝试一下 由于问题描述有点长 我首先声明我想做的是看看是否可以将实现更改为更类似于最佳实践实现的东西 我有 3 个与此问题相关的实体 工作站 ws
  • 如何在 Ionic 3 中高效存储和使用身份验证

    我目前正在开发一个离子 3 4 适用于 iOS Android 的应用程序 我不熟悉身份验证过程或应用程序 在提供程序中使用 HTTP 请求后 我得到了我的对象 用户 但我完全不知道如何存储或处理它 有哪些好的做法 我是否应该将对象存储在提
  • 适用于 iPhone 视网膜显示屏的图像

    我有一个可以工作的应用程序 我已经在我的 iPod touch 上测试过了 一切都很好 我的标签栏图标和启动屏幕图像位于资源文件夹中的单独文件夹中 Resources gt images 现在 我知道对于 iPhone4 我需要使用 2x
  • 如何将列高设置为等于布尔玛(flexbox)中最长的列?

    我正在使用 Bulma 0 4 0 尽管答案可能与 Bulma 本身无关 如何将列高设置为与其他列相同 见下面的截图 编辑 codepen 包含更多显示实际行为的文本 https codepen io anon pen vmKVbx htt
  • Plon 全文索引 Excel 文件

    如何自定义 Plone 搜索引擎以激活 excel 文件的全文索引 我已经安装了 pdftotext 和 wv 用于 pdf word 文件全文索引 如果你添加产品 OpenXml https pypi python org pypi Pr
  • 在类中为其自己的字段使用 getter/setter 有什么好处吗? [复制]

    这个问题在这里已经有答案了 通常 在我自己的项目中 我使用 getter 和 setter 进行任何字段访问 并且我在工作中也遵循同样的做法 不久前 我们项目的技术负责人问我为什么要这样做 以及为什么这比仅仅使用字段本身更好 如果需要由子类
  • 由于频繁断网,repo 同步卡在 99%

    我尝试重新同步cyanogenmod源 一直到99 阶段 但是这个阶段好像有一个大文件 而且由于我的网络连接经常断开 所以无法下载它 每次发生断开连接时 fatal early EOF被打印出来 则repo sync停止 似乎在下次运行时
  • 幻影数据用例

    我试图理解 rust 中的 phantomData 我有一个 Foo 结构包裹着一个原始指针 我告诉编译器 Foo 不能比 a 更长寿 所以我试图防止属性 v 的值在 Foo 之前被删除 但是我发现当 String s 可以在 f 之前删除
  • 断开连接后保持 SSH 会话运行 - 过夜 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这是对此的后续问题question https stackoverflow com questions 33041892 keep ssh
  • 使用 Word 互操作查找具有特定格式的一系列文本

    我有一个 MS Word 插件 需要仅根据其格式从一系列文本中提取文本 特别是在我的情况下 如果文本带有下划线或删除线 则带有下划线或删除线的字符 单词的范围通过需要找到 以便我可以跟踪它们 我的第一个想法是使用Range Find as
  • .Net File.GetLastAccessTime 更新文件的上次访问时间

    我们使用下面的行来获取文件的上次访问日期和时间 DateTime dtLastAccesstime File GetLastAccessTime sFilePath 但我们面临着奇怪的问题 上面的调用本身修改了最后访问时间 因此 我们有效地
  • Visual C++ 获取资源的路径

    我正在尝试将图像添加到 Visual C 项目并获取它的路径 基本上我想要的是向项目添加一些图像 以便它可以通过在项目内部而不是本地驱动器上获取必要的图像来在任何计算机上运行 我通过右键单击资源文件 在解决方案资源管理器菜单中 并添加 gt
  • 如何在特定时区(最好是我的应用程序的默认时区,而不是 UTC)创建新的 DateTime 对象?

    我已将时区设置为 config application rb 并且我希望默认情况下在我的应用程序中生成的所有时间都位于该时区 但是当我创建新的DateTime对象 使用 new 它创建它GMT 如何让它位于我的应用程序的时区 配置 应用程序
  • 如何将 NSString 从 CamelCase 转换为 TitleCase,将“playerName”转换为“Player Name”?

    我正在寻找将字符串从驼背格式转换为标题大小写格式的最简单方法 如何将 玩家姓名 更改为 玩家姓名 NSString str playerName NSMutableString str2 NSMutableString string for
  • 限制vb.net中列表框中的选择

    我正在 vb net 中创建一个包含列表框的 Web 控件 我知道我可以选择 单个 或 多个 选择模式 但我有兴趣将 多个 选择限制为预定大小 例如 阻止用户选择 3 个以上的项目 我尝试向列表框中添加一个验证器 这可能是一种前进的方法 但
  • 我无法刷新标准输入。如何在 C 中刷新标准输入?

    How to 刷新标准输入 为什么它在下面的代码片段中不起作用 include