我的 for 循环遇到问题,其中 val
被作为垃圾数据打印出来。我想知道这是否是因为当我这样做时 num[(j+1)]
它实际上增加了变量 J,如果是这样,我如何增加下一个元素而不影响 for 循环变量?
while ((scanf("%c",&userIN) == 1) && (userIN != '\n')) {
if(userIN >= '0' && userIN <= '9') {
num[i] = (userIN-'0');
}
else if ((userIN == '+')||(userIN == '-')||(userIN == '/')||(userIN == '*')) {
ops[i+1] = userIN;
}
i++;
}
for (j = 1; j <= i; j+2) {
if (ops[j] == '+') {
k = j;
k++;
num[k] = ((num[j]--) + (num[j]++));
printf("\n%d",(num[j]--));
val = num[k];
}
else if (ops[i] == '-') {
k = j;
k++;
num[k] = ((num[j]--) - (num[j]++));
val = num[k];
}
else if (ops[j] == '/') {
k = j;
k++;
num[k] = ((num[j]--) / (num[j]++));
val = num[k];
}
else if (ops[j] == '*') {
k = j;
k++;
num[k] = ((num[j]--) * (num[j]++));
val = num[k];
}
}
最佳答案
总的来说,这个循环是非常错误的。实际上两个循环。
在第二个循环中,您可能期望读取的第二个元素是运算符,并且周围有操作数。但是增量部分仅增加 1,因此它将在第二个位置处理运算符并获取索引 1 和 3 处的操作数。这是错误的,因为它们很可能未初始化。将 j
增加 2 会以某种方式解决(或者更确切地说是一种解决方法)问题。
在第一个循环中,不能保证输入将按操作数-操作符-操作符-操作符-操作符-...的顺序出现,更糟糕的是,i++
在else 中做什么
block 是什么意思?这会完全搞砸事情,因为它会在两个数组中腾出额外的空间,这将完全混淆第二个循环。如果您完全删除此 else
block ,并且您提供了预期的输入,则代码可能会正常工作。
而是考虑某种方式来验证输入,即使进行了上述修复,仍然存在很多限制,例如您只能提供单个数字作为操作数等。
关于c - C 中严格从左到右求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35860863/