【问题标题】:Simple cube and square sum function won't run (C) [duplicate]简单的立方体和平方和函数不会运行(C)[重复]
【发布时间】:2013-07-23 09:59:57
【问题描述】:

学习 C,尝试编写一个程序,输出输入数字的立方和平方和。

#include <stdio.h>

main()
{
int a;
scanf("%d",a);
printf("%d",cube(a)+sqr(a));
}

cube(int x)
{
return(x*x*x);
}

sqr(int arg)
{
return(arg*arg);
}

当我运行程序时,它会在我输入一个数字后输出一些看似随机的数字串。有什么方法可以在不改变使用 return 来分配变量的情况下修复它?

【问题讨论】:

  • 在你的 scanf 语句中写入 &a
  • 总是将你的代码编译为:gcc -Wall -pedantic code.c -c exe
  • 有人想向我解释那是什么吗?

标签: c input


【解决方案1】:

scanf 需要一个指针:

scanf("%d",&a);

而不是

scanf("%d",a);

【讨论】:

  • 谢谢大声笑是一个如此简单的错误
  • 你的编译器应该已经警告过你了。你是用-Wall (gcc/linux) 编译吗?
  • 不知道这是什么意思.. 我正在使用代码块,它运行程序但输入后崩溃
  • 在“项目 -> 构建选项 -> 编译器设置 -> 编译器标志”中,您应该选中“启用所有编译器警告”并注意这些警告。
【解决方案2】:
int a;
scanf("%d",a);

          ^

必须是&amp;adscanf 转换说明符需要一个指向 int 参数的指针。

【讨论】:

    【解决方案3】:

    你需要为你的函数定义一个返回类型!

    #include <stdio.h>
    
    int main()
    {
      int a;
      scanf("%d",a);
      printf("%d",cube(a)+sqr(a));
      return 0;
    }
    
    int cube(int x)
    {
      return(x*x*x);
    }
    
    int sqr(int arg)
    {
      return(arg*arg);
    }
    

    【讨论】:

    • 实际上,他使用的似乎是一个支持隐式 int 返回类型的旧编译器。
    • 试过你的代码,它有同样的问题。我相信 C,如果未指定返回类型,则隐含 int。
    • @PaulR 我不知道这件事,对不起 x)
    • 没问题 - 这种 C 用法已经过时了大约 20 - 30 年!
    • NP 解决方案已发布,感谢您的尝试!
    【解决方案4】:

    你没有在scanf函数中给出“a”的地址。

    请使用:

    scanf("%d", &a);
    

    【讨论】:

    • &amp;a 不是a 的地址。地址将是十六进制的。 &amp;a 只是将a 的地址提供给scanf
    猜你喜欢
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 2014-07-25
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多