如何在scanf()结束时检测空格或换行符?

时间:2013-09-24 18:37:50

标签: c io newline scanf space

我正在编写一个程序,我必须接受来自用户的命令,例如shell,用户可以在其中设置环境变量的值。我遇到的问题是,如果用户键入set var var-value,我需要知道用户键入了一个空格而不是set并按下了输入,这是一个不同的命令。如何确定用户是否按下空格或使用scanf()输入?

4 个答案:

答案 0 :(得分:2)

您将知道用户按下了输入,因为scanf()将不会返回,直到用户这样做。如果您尝试在用户输入时实时阅读字符,scanf()将无法为您效劳。您需要使用getchar()getch()getche()函数或OS提供的函数来读取键盘输入。将字符逐个读入数组,在读取时扫描空格和输入键。

另见this question

答案 1 :(得分:1)

您可以使用ctype.h中的isspace()函数进行检查

另一种可以使用strchr()查找输入是否包含'\ n'或空格

的方法
if(strchr(input,'\n')==NULL && strchr(input,' ')==NULL)
{
//do something
}  

编辑

scanf()读取输入直到出现任何空格字符。在空白区域后忽略输入。

使用fgets()代替scanf()  如果输入长度小于MAXLENGTH的输入,'\n'将保留在空字符

之前

将其替换为空字符

char input[MAXLENGTH+1];  

fgets(input,sizeof(input),stdin);

if(input[strlen(input)-1]=='\n')     
input[strlen(input)-1]='\0'; 

答案 2 :(得分:1)

您可以使用fgets代替scanf

答案 3 :(得分:1)

  

如何在scanf()结束时检测空格或换行符?

使用%[\n]将输入读取到'\n'

char buffer[256];
//                  v------- Read and discard leading whitespace
int retval = scanf(" %255[\n]", buffer);
if (retval != 1) {
  ; // handle error or EOF
}
// Now scan buffer for whatever input format you desire
char ch;
retval = sscanf(buffer, "set%c", &ch);
if ((retval == 1) && (ch == '\n')) {
  ; // deal with "set"
}
else {
  char var[256];
  char value[256];
  retval = sscanf(buffer, "set %s %s", var, value);
  if (retval == 2)  {
    ; // deal with "set var var-value"
  }
  else {
  // other parsings
  }
}