我的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];
}
}
答案 0 :(得分:1)
一般来说,循环是非常错误的。实际上两个循环。
在第二个循环中,您可能希望第二个元素读取是运算符,并且周围有操作数。但是增量部分只增加1,所以它将在第二个位置处理运算符并在索引1和3处获取操作数。这是错误的,因为它们很可能是未初始化的。将j
增加2将以某种方式解决(或者更确切地说是解决方法)问题。
在第一个循环中,无法保证输入将按顺序操作数 - 运算符 - 操作数 - 运算符 - 操作数-...更糟糕的是,i++
块中else
的含义是什么意思?这会完全搞砸事情,因为它会在两个阵列中产生额外的空间,这将完全混淆第二个循环。如果您完全删除此else
块,则代码可能会在您提供预期输入时起作用。
而是考虑一些如何验证输入的方法,即使上面的修复仍然存在很多限制,例如你只能提供单个数字作为操作数等。