如果我想要收到一个字输入在C,我将如何检查,看看是否额外的人物已发送,如果是这样,我怎么清楚?

是否有一个功能,其作用类似规模介于仓储式超市货架(stdin),但它不会提示用户输入一个字,所以我只能把 while(getc(stdin)!=EOF);?或功能看看下一个字符的缓冲,如果它不能返回NULL(或什么会在那里),我可以叫一个(闲话)的功能,冲stdin?

编辑

所以现在,scanf似乎是这样做的诀窍,但是有办法得到它读到的 整个 串,直到newline?而不是到最近的空白?我知道我可以把"%s%s%s"或什么的格式串但我可以处理的一个任意数量的空间?

有帮助吗?

解决方案

可以不刷新的输入流。如果你这样做你会被调用未定义的行为。最好的办法是做:

int main() {
  int c = getchar();
  while (getchar() != EOF);
  return 0;
}

要使用scanf魔法:

#include <stdio.h>
#include <stdlib.h> 

#define str(s) #s
#define xstr(s) str(s)
#define BUFSZ 256

int main() {
  char buf[ BUFSZ + 1 ];
  int rc = scanf("%" xstr(BUFSZ) "[^\n]%*[^\n]", buf);
  if (!feof(stdin)) {
    getchar();
  }
  while (rc == 1) {
    printf("Your string is: %s\n", array);
    fflush(stdout);
    rc = scanf("%" xstr(LENGTH) "[^\n]%*[^\n]", array);
    if (!feof(stdin)) {
        getchar();
    }
   }
   return 0;
}

其他提示

可以使用getline读取输入的一整行。

另外(响应你原来的问题),你可以调用标准输入selectpoll,看是否有要读取其他字符。

我有一个类似的问题今天,我找到了一种方法,似乎工作。我不知道的细节情况,所以我不知道它是否会为你工作或没有。

我正在写一个例行程序,需要得到一个单一的角色的键盘,并需要三个具体键('1','2',或'3').如果不是这些程序需要的发送和错误的消息和循环回对另一个尝试。

问题是,在外来的性格,我正在进入返回形式(),'进入'键击(其发送键的程序)保存在输入缓冲区。那(非印刷)newline字然后返回的形式()设施在错误的校正的循环,导致进一步的第二个错误信息(自newline字不是一个'1','2',也不是一个'3'.)

这个问题进一步复杂,因为有时我会提前获得自己,而不是进入一个单一的角色,我会输入文件,这些选项之一将请求。然后我一整串不需要人物在缓冲区,导致在一个长长的清单的错误信息滚动屏幕上。

不凉爽。

什么似乎已经固定,不过,如下:

c = getchar();  // get first char in line
while(getchar() != '\n') ; // discard rest of buffer

第一行就是一个实际使用的字符,我进入。第二线处置任何残余仍然在输入缓冲区。它只是创造了一个循环,再换一个角色的时间自输入缓冲区。有没有行动规定采取的地方,而该声明是循环。它只需读一字,如果它不是一个新行,以追溯的下一步。当发现有一个空行,循环结束,它会在以下订单的企业中的程序。

我们可以使一个函数来清除键盘缓冲区,如下所示:

#include <stdio.h>

void clear_buffer(){
   char b;
   //this loop take character by character in the keyboard buffer using 
   //getchar() function, it stop when the variable "b" was
   //enter key or EOF.
   while (((b = getchar()) != '\n') && (b != EOF));
}

int main()
{
    char input;
    //get the input. supposed to be one char!
    scanf("%c", &input); 
    //call the clearing function that clear the buffer of the keyboard 
    clear_buffer(); 
    printf("%c\n",input); //print out the first character input
    // to make sure that our function work fine, we have to get the
    // input into the "input" char variable one more time
    scanf("%c", &input); 
    clear_buffer();  
    printf("%c\n",input);
    return 0;
}

使用读这会占用大量的字符(大于1,也许256)的,看看有多少真正返回。如果你不止一个,你知道;如果你只有一个,那就是所有可用。

您不提平台,这得到相当棘手相当迅速。例如,在Unix(Linux)的,正常的机制将返回数据线 - 也许你是后一个字符和一个换行符。或者,也许你说服你的用户键入^ d(默认)发送前面的字符。或者,也许使用控制功能的终端放入原始模式(像例如viemacs做程序)。

在Windows中,我不敢肯定 - 我认为这是一个getch()功能,做你所需要的。

你为什么不使用,而不是GETC scanf函数,通过使用scanf函数u能得到整个字符串。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top