c - 使用 getchar() 清除输入缓冲区时如何避免按两次 Enter 键?

标签 c arrays buffer-overflow getchar

我有这个程序:

#include <stdio.h>
#define SIZE 19

int main(){

char string[SIZE];

while (string[0] != 'A'){
 printf("\nEnter a new string.\n");
 fgets(string,SIZE,stdin);

 int storage = 0;
 while (storage != '\n') 
 {
   storage = getchar(); 
 }
 }
 }

如果输入的字符串超过 string[] 可以容纳的最大字符数,则存在带有 getchar() 的嵌套 while 循环。如果不存在,输入一个包含 20 个字符的字符串将导致输出为:

Enter a new string.
12345123451234512345

Enter a new string.

Enter a new string.

问题是,这需要我按 Enter 两次才能输入新字符串:一次用于“fgets”,一次用于嵌套 while 循环(这是我对发生的情况的理解)。

有没有办法改变这一点,这样我只需按“Enter”一次,或者可能有办法将整个 while 循环更改为更优雅的东西?

最佳答案

如果从 fgets 接收的缓冲区包含换行符,您就知道它会读取输入的所有内容,因此您无需执行任何其他操作。如果没有,则使用额外的循环来刷新缓冲区。

关于c - 使用 getchar() 清除输入缓冲区时如何避免按两次 Enter 键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51227542/

相关文章:

c++ - 如何将使用 C++ 传递引用的函数转换为 C?

c++ - 如何使用 C 修改文本数据文件中的值

c - 内存分配如何在不显式分配的情况下为 char* 工作

javascript - 如何使用 PHP 中的 ID 数组从 mysql 表中删除多行

c - 为什么此函数无法成功确定两个任意字符串是否相同?

c - 缓冲区溢出攻击后如何 "cleanly"终止程序

c# - c/c++ 类似于 c# System.ServiceModel.Channels.BufferManager

java - 游戏中的按钮未显示正确的消息

c++ - c++是否存在缓冲区溢出helloworld?

c - 基于堆栈的缓冲区的缓冲区溢出预防