scanf() 失败后如何清除输入缓冲区?

Dar*_*der 2 c scanf input-buffer

scanf()我的程序中的输入缓冲区有问题。

首先我要求用户输入:

char someVariable;
printf("Enter text: ");
scanf(" %c",&someVariable);
Run Code Online (Sandbox Code Playgroud)

然后我有一个循环,一次遍历输入一个字符,scanf()直到到达换行符。

问题是,循环完成后,不知何故,缓冲区中仍然有一些东西,因此这个函数(在循环中被调用)被再次调用并破坏了我程序中的逻辑。

如何强制清除输入缓冲区?

我只能使用scanf()(作业要求)

void checkType(){
    char userInput;
    char tempCheckInput;
    printf("Enter Text: ");
    scanf(" %c",&userInput);
    while (userInput != '\n'){

        tempCheckInput = userInput;
        scanf("%c",&userInput);
Run Code Online (Sandbox Code Playgroud)

忽略循环结束;这是我获取输入的部分。

chu*_*ica 5

我怎样才能强制清除输入缓冲区?

在 C 中,,如stdin,无法被清除(以标准方式),如“删除截至该时间点的所有输入

相反,输入可以消耗并丢弃(类似于“清除”)输入以满足数据条件。

通常的方法是

int consume_rest_of_line(void) {
  int ch;
  while ((ch = getchar()) != '\n' && ch != EOF) {
    ;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果仅限于scanf()

int consume_rest_of_line(void) {
  char ch;
  while (scanf("%c", &ch) == 1 && ch != '\n') {
    ;
  }
}
Run Code Online (Sandbox Code Playgroud)