我正在编写一个程序,我必须接受来自用户的命令,例如shell,用户可以在其中设置环境变量的值。我遇到的问题是,如果用户键入set var var-value
,我需要知道用户键入了一个空格而不是set
并按下了输入,这是一个不同的命令。如何确定用户是否按下空格或使用scanf()
输入?
答案 0 :(得分:2)
您将知道用户按下了输入,因为scanf()
将不会返回,直到用户这样做。如果您尝试在用户输入时实时阅读字符,scanf()
将无法为您效劳。您需要使用getchar()
,getch()
或getche()
函数或OS提供的函数来读取键盘输入。将字符逐个读入数组,在读取时扫描空格和输入键。
答案 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
}
}