相关疑难解决方法(0)

如何清除C中的输入缓冲区?

我有以下程序:

int main(int argc, char *argv[])
{
  char ch1, ch2;
  printf("Input the first character:"); // Line 1
  scanf("%c", &ch1); 
  printf("Input the second character:"); // Line 2
  ch2 = getchar();

  printf("ch1=%c, ASCII code = %d\n", ch1, ch1);
  printf("ch2=%c, ASCII code = %d\n", ch2, ch2);

  system("PAUSE");  
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

正如上面代码的作者所解释的那样:程序将无法正常工作,因为在第1行,当用户按下Enter时,它将在输入缓冲区中留下2个字符:Enter key (ASCII code 13)\n (ASCII code 10).因此,在第2行,它将读取\n并且不会等待用户输入字符.

好的,我明白了.但我的第一个问题是:为什么第二个getchar()(ch2 = getchar();)不读取Enter key (13)而不是\n字符?

接下来,作者提出了两种解决此类问题的方法:

  1. 使用 fflush()

  2. 写一个这样的函数:

    void
    clear …
    Run Code Online (Sandbox Code Playgroud)

c buffer

70
推荐指数
7
解决办法
32万
查看次数

使用scanf()从键盘读取时读取前一输入的换行符

这被认为非常简单,但我无法从键盘读取连续输入.

这是代码:

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

int main()
{
    char string[200];
    char character;
    printf ("write something: ");
    scanf ("%s", string);
    printf ("%s", string);
    printf ("\nwrite a character: ");
    scanf ("%c", &character);
    printf ("\nCharacter %c  Correspondent number: %d\n", character, character);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

怎么了

当我输入一个字符串(例如:计算机)时,程序会读取换行符('\n')并将其放入character.以下是显示的外观:

 write something: computer
 computer
 Character:
    Correspondent number: 10
Run Code Online (Sandbox Code Playgroud)

此外,该程序不适用于包含多个单词的字符串.我怎么能克服这些问题?

c string char

13
推荐指数
2
解决办法
1万
查看次数

标签 统计

c ×2

buffer ×1

char ×1

string ×1