【发布时间】:2018-06-03 11:21:53
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
int mult;
int n;
int ans;
ans = mult * i;
printf("Please enter a multiple you want to explore.");
scanf("%d", &mult);
printf("Please enter the number which you would want to multiply this number till.");
scanf("%d", &n);
for(i = 0; i<n; i++) {
printf("%d x %d = %d \n", &mult, &i , &ans);
}
return 0;
}
大家好,这是一个简单的代码,旨在帮助用户列出 n 次的时间表。但是,我收到了未定义的行为,我很困惑我的“for”循环的实现有什么问题。
我收到这个作为我的输出。
6356744 x 6356748 = 6356736
在我的控制台中使用了 n 次。
我想问
我的代码逻辑有什么问题吗? (我假设我的代码确实有问题,所以请赐教)
当我必须不断更改变量的值时,使用指针指向上述变量的内存地址会更好(甚至可能)吗?如果是,我该怎么做?
谢谢!
【问题讨论】:
-
不要在 printf 中使用
&。 -
我意识到这可能是由于我对 scanf 的不当使用导致了未定义的行为。有什么想法吗?
-
您不需要在 printf 中取消引用。您将指针传递给 scanf 函数,以便它可以将整数放在其范围之外的变量中。您将值传递给 printf。同样在通过scanf获取值之前定义了ans,您需要在scanf调用之后进行计算。
-
@PaulOgilvie 啊,我明白了!但是,我的回答仍然给出了一个输出,表明仍然存在未定义的行为
-
@sacko87 所以我可以将计算放在循环中吗?这会导致我在“ans”变量中创建一个数组吗?
标签: c pointers for-loop undefined-behavior