【发布时间】:2022-01-09 20:18:25
【问题描述】:
我希望用户能够输入两种类型的输入,例如:“C[some size_t]”和“O[some memory address]”,根据开头是 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) 循环是否是处理多个用户输入的正确方法。
【问题讨论】:
-
小心:所有字符串函数(如
strcmp)都希望它们的参数是正确的以空值结尾的字符串。您不能将单个字符视为字符串。如果要比较字符,请使用普通比较,例如==。如if (branch == 'C') -
虽然它不适用于您的情况(因为一开始是错误的)请记住,如果两个字符串相等,
strcmp将返回0。而0被认为是false。 -
我还建议您添加某种 prompt 以便用户知道程序已准备好读取输入。
-
@Someprogrammerdude 哦!谢谢,我忘记了。比较字符串时我仍然处于Java思维方式哈哈
-
为什么要扫描两次到
branch?你不会只扫描一次然后检查吗?if(scanf(branch) == numberOfScannedValues) { if(branch == ...) {} else if(branch == ...) {} } else { /* handle invalid input */ }- 您必须在各自的ifs 内分别扫描第二个参数。