我正在编写一个程序,我必须接受来自用户的命令,比如用户可以设置环境变量值的 shell。我遇到的问题是,如果用户键入set var var-value
我需要知道用户键入了一个空格而不是仅仅set
按下回车键,这是一个不同的命令。如何确定用户是按下空格还是使用输入scanf()
?
问问题
6067 次
4 回答
2
你会知道用户按下了回车,因为scanf()
在用户这样做之前不会返回。如果您尝试在用户键入时实时读取字符,scanf()
则对您不起作用。您将需要使用getchar()
、getch()
或getche()
函数或操作系统提供的函数来读取键盘输入。将字符一个一个读入一个数组,在阅读时扫描空格和回车键。
另请参阅此问题。
于 2013-09-24T18:48:48.737 回答
1
您可以使用ctype.h 中的isspace()函数进行检查
另一种方法可以使用strchr()来查找输入是否包含 '\n' 或空格
if(strchr(input,'\n')==NULL && strchr(input,' ')==NULL)
{
//do something
}
编辑
scanf() 读取输入直到出现任何空白字符。空格忽略输入后。
如果输入长度小于 MAXLENGTH 的输入,请使用fgets()'\n'
而不是 scanf() ,保留在 Null 字符之前
用空字符替换它
char input[MAXLENGTH+1];
fgets(input,sizeof(input),stdin);
if(input[strlen(input)-1]=='\n')
input[strlen(input)-1]='\0';
于 2013-09-24T18:48:29.950 回答
1
你会使用fgets
而不是scanf
于 2013-09-24T18:50:21.843 回答
1
如何在 scanf() 末尾检测空格或换行符?
用于%width[^\n]
读取最多 a 的输入'\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
}
}
于 2013-09-24T19:27:18.893 回答