C/C++ 中清空输入缓冲区2024年8月28日 | 阅读 4 分钟 在本教程中,我们将学习什么是缓冲区以及如何在 C 和 C++ 中清除输入缓冲区。 缓冲区到底是什么?缓冲区是一种临时存储。每个标准输入和输出设备都有一个输入和输出缓冲区。在传统的 C/C++ 中,流是缓冲的。例如,当我们按下键盘上的一个键时,它会传送到操作系统的缓冲区并一直保留在那里,直到分配给该程序的时间结束。 它对编程有什么影响?在某些情况下,我们可能需要清空不需要的缓冲区,以便将下一个输入接收到所需的容器中,而不是前一个变量的缓冲区中。例如,在 C 语言中,如果我们要输入字符数组或字符,我们必须清空输入缓冲区;在 C++ 中,我们必须清除输入缓冲区;否则,预期的输入将由前一个变量的缓冲区保留,而不是由所需的容器保留。因为前一个变量的缓冲区是新容器的空间(因为我们没有清除它),当我们在第一次输入后在输出屏幕上按下“Enter”(回车)时,计算机就会错过下一个容器输入。 C 语言程序 输出:(如果用户输入 javaTpoint c) javaTpoint c javaTpoint 时间复杂度将为:O(1)。 C++ 程序 输出:(如果用户输入 20 javatpoint) Now enter the values 20 Javatpoint This is the generated output 20 Javatpoint 时间复杂度将为:O(1)。 在上述任一代码中,输出都没有按预期生成。这是由于缓冲区被占用。字符“\n”保留在缓冲区中并作为下一个输入进行处理。 最好的解决方法是什么?在 C 的情况下 使用“ while ((getchar()) != '\n'); ”: 输入“while ((getchar())!= 'n');”会读取缓冲区字符直到末尾并将其丢弃(包括换行符),当在“scanf()”语句之后使用时,它有助于删除输入缓冲区并允许输入到所需的容器中。 C 语言程序 输出:(如果用户输入 javaTpoint c) javaTpoint c javaTpoint c 时间复杂度将为:O(n),其中 n 表示字符串的大小。 使用“fflush(stdin)”: 在“scanf()”命令后键入“fflush(stdin)”也有助于清除输入缓冲区,但它通常被忽略,并且在 C++11 标准中被标记为输入流的“未定义”。 在 C++ 的情况下 1. 使用“cin.ignore(numeric_limits::max(),'\n'); ”:- 在“cin”语句之后,放置“cin.ignore(numeric_limits::max(),'\n');”会丢弃所有输入流,包括换行符。 C++ 程序 输出 Now enter the values 5 JTP Here is the output 5 JTP 时间复杂度将为 O(1)。 2. 使用“cin.sync() ”: 在“cin”语句之后键入“cin.sync()”会删除缓冲区中的所有内容。尽管“cin.sync()”可能并非在所有应用程序中都有效(根据 C++11 及更高标准)。 C++ 程序 输出 Now enter the values - 1 This is a program Here is the output - 1 This is a program 时间复杂度将为 O(1)。 3. 使用“cin >> ws”: 在“cin”指令之后放置“cin>>ws”会指示编译器忽略缓冲区并删除字符串或字符数组实际内容之前的所有空格。 C++ 程序 输出 Now enter the values - 3 Demo program Here is the output - 3 Demo program 时间复杂度将为 O(1)。 下一个主题有序双向链表就地转换为平衡二叉搜索树 |
SJF(最短作业优先)是一种调度策略,它首先将具有最短 CPU 爆发时间的进程分配给 CPU。由于此技术是非抢占式的,一旦进程开始运行,就无法停止,直到其完成。SJF 调度方法……
阅读 6 分钟
C 是一种以低级控制和效率而闻名的编程语言。C 具有广泛的字符串操作函数,可用于执行诸如字符串比较、连接和复制等操作。其中一个关键函数是 Strcmpi(),它允许进行不区分大小写的比较...
阅读 3 分钟
C语言数字转换为字符:在C语言中,我们可以很容易地通过循环和switch case将数字转换为字符。在此程序中,我们从用户那里获取输入,并迭代此数字直到它为0。而...
阅读1分钟
概念编译器是软件工具,可将一种编程语言的源代码翻译成汇编代码或字节码。通常,源代码是用高级、人类可读的语言编写的,包括 Java 和 C。我们将看一些最好的 C 编译器...
阅读 4 分钟
C 程序中的所有变量都有内存地址并存储在内存中。但是,register 关键字意味着编译器应将变量存储在 CPU 寄存器中,而不是内存中。如果您不知道,处理器只有有限数量的...
阅读 3 分钟
在本主题中,我们将讨论C语言中的abs函数。abs()函数是stdlib.h头文件中的一个预定义函数,用于返回给定整数的绝对值。因此,如果我们想返回绝对值...
阅读 4 分钟
C语言的地址运算符是一个强大的工具,它为程序员提供了对内存位置的直接访问。它用“&”号表示。地址运算符是一元运算符,它返回变量的内存地址。语法:以下是地址运算符的语法...
阅读 3 分钟
简介:程序员以模式的形式编写了大量的练习程序。其中之一是钻石模式程序。在这里,我们将使用C语言创建一个空心钻石设计。C语言星形图案,带空心钻石让我们用C语言创建一个空心钻石星形图案程序:#include<stdio.h> int...
5 分钟阅读
数组是同质的。整数数组可以包含负值、正值或零。我们需要重新排列数组的元素,以便所有负元素都放在一边,要么放在数组的开头,要么放在末尾。顺序...
5 分钟阅读
在计算机编程中,尾部递归是指一种特定的递归形式,其中函数在产生输出之前,将自己作为最后一步进行调用。简而言之,在尾递归函数中,在函数完成之前,调用自身是函数做的最后一件事...
阅读 10 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India