【问题标题】:Trying to pass addresses to simple variables to a function (pointers & loops) In C尝试将地址传递给简单变量的函数(指针和循环)在C中
【发布时间】:2018-03-31 15:44:05
【问题描述】:

我试图在我的 main() 中声明变量,然后使用它们的地址并在函数中指向它们,这样我的函数就不会返回任何东西,并且函数中变量的所有更改都会直接转到主要的()。但是每次我运行这个程序时,它都会询问 x,然后询问“要使用多少个术语”。如果我写 0,它会起作用并转到 if 语句,如果我写的数字大于 0,它就会起作用,但如果我写一个像-1这样的负数,它继续前进并结束他的程序???有人知道吗?

这是我的基本代码:

void getInput(double *,int *);

void main()
{
    double x;
    int n;

    getInput(&x,&n);
}
void getInput(double *N, int *X)
{
 N = 0;
 printf("Please enter a real value for x: ");
 scanf("%lf", &X);
 while(N <= 0)
 {
     printf("How many terms to use: ");
     scanf("%ld", &N);
     if (N <= 0)
     {
         printf("The value of a must be greater than %d\n", N);
     }
  }
}

【问题讨论】:

  • 'scanf("%ld", &N);'双精度格式说明符不正确。

标签: c function loops pointers variables


【解决方案1】:

变化:

scanf("%lf", &X);

到:

scanf("%d", X);

getInput 函数内部,X 已经是一个指针。

另一个scanf 也是如此,您应该将scanf("%ld", &amp;N); 更改为scanf("%lf", N);

还将N = 0 更改为*N = 0 并将if (N &lt;= 0) 更改为if (*N &lt;= 0)

您还混淆了%ld%lf 格式说明符。

你的编译器应该警告过你。

最后改变:

printf("The value of a must be greater than %d\n", N);

printf("The value of a must be greater than 0");

如果您输入例如-1 你不想显示文本 The value of a must be greater than -1

无关: 这是int main(),而不是void main()

【讨论】:

  • @DogLoaf 为您的编译器启用警告(-Wall for gcc)。
  • @DogLoaf 我编辑了这个问题,我最初发现的问题要多得多。
  • 我现在改变了你赖特的 printf 事情我做了一些愚蠢的事情也尝试在你放置它们的地方添加 * 现在它跳过了 scanf("%lf", N);部分。我认为这是因为它跳过了一段时间,因为变量 n 没有分配给它 0 。不知道?
  • oups 没关系我找到了,我把 &x,&n 放错了 &n,&x
  • 对不起,这是scanf("%d", X); 而不是scanf("%ld", X);。是的,你混淆了 x 和 x。使用易于理解的名称(例如 nbofitems 而不是 n)来命名变量的一个很好的理由。
猜你喜欢
  • 2020-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
  • 2019-07-26
  • 2013-05-14
  • 1970-01-01
  • 2016-04-28
相关资源
最近更新 更多