我有一个程序接受来自命令行的输入。虽然所有可用命令都是一个字符串,但是有几个命令需要辅助字符串来进一步定义操作。
e.g。 “end”是一个命令,“add foo”是第二个命令。
我的代码处理2个字符串输入正常,但是当我尝试访问单个字符串命令(例如“end”)时,程序会等待更多输入而不是立即执行。
有没有什么方法可以让程序只读一行(最多可以有两个字符串)而不是现在的方式?
以下是目前的实施方式:
while(1)
{
scanf("%s%s", commandString,floorPath);
if(!strcmp(commandString,"end") return;
//I've got several of these as an "if / else", but there's no
//need to reprint them here.
}
答案 0 :(得分:3)
单独读取第一个字符串,并根据输入决定是否需要读取另一个字符串。
while(1)
{
scanf("%s", commandString);
if (requiresAnotherString(commandString))
{
scanf("%s", floorPath);
// handle two string command
}
else
{
// handle one string command
}
}
答案 1 :(得分:1)
MByD说了什么,或者说,读取一行,然后单独从scanf()
解析您读入的行,看看它是单字命令还是双字命令并采取适当的操作。
答案 2 :(得分:0)
这是另一种选择:
int cmdFromStdin (char **cmd) {
int count = 0, nBytes = 0;
char *word, inline[BUFSIZ];
if (nBytes = getline (inline, BUSIZ, STDIN)) < 0)
return nBytes;
for (word = strtok (inline, " ") ; word != NULL ;
word = strtok (NULL, " "))
cmd[count++] = word;
return count;
}
我用C编码已经有一段时间,但我记得有过scanf的问题(所以我以前使用过getline())。 strtok函数将解析出字符串,返回时您可以检查成功并处理数组cmd。我相信你必须包含stdio.h,stdlib.h和string.h。我的C有点生疏,所以请原谅语法错误。