C-两种具有未知输入数的格式化用户输入



我希望用户能够输入两种类型的输入,比如:;C[某个大小_t]";以及";O[某个存储器地址]";根据一开始是C还是O,我会调用不同的函数。我还希望能够以任何顺序接收未知数量的这些输入。

我绕过它的方式是这样的:

int main()
{
// variables
while (1) { // Infinite loop to take in multiple unknown amount of inputs?
while (fgets(input, BUFFER_SIZE, stdin)) {
if (sscanf(input, "%c%zu", &branch, &num) == 2) {
if (strcmp(&branch, "C")
// function call
} else if (sscanf(input, "%c%c", &branch, (char *)addr) == 2) {
if (strcmp(&branch, "O")
// function call
}
}
}
return 0;
}

我当然理解为什么它不起作用,我知道我的非解决方案是错误的,但我不知道该怎么办。代码接收第一个输入并挂起,如果我以O开头的输入开始,它会在不应该进入第一个if语句的时候进入。我也不确定我的while(1)循环是否是处理多个用户输入的正确方法。

您尝试一次性读取branch字符和相应的参数,但两种情况下的参数不同。因此,您需要首先读取字符,然后决定仅然后扫描参数——只要您知道要扫描什么,就可以选择合适的格式字符串。

正如你刚刚在中阅读任何字符一样,你可以用getc简单一点,顺便说一下:

char branch = getc(); // instead of `if(scanf("%c", &branch) == 1)`
// note: would have been one single scan (branch) only!
if(branch == 'C')
{
// scan num
}
else if(branch == 'O')
{
// scan addr
}
else
{
// error handling
}

或者(我个人更喜欢(

char branch = getc();
switch(branch)
{
case 'C':
// scan num
break;
case 'O':
// scan addr
break;
default:
// error handling
break;
}

请注意,strcmp需要以null结尾的字符串(char数组(,并且不能用于比较单个字符——这些字符需要通过相等运算符进行比较,请参阅上文。

最新更新