【问题标题】:For loop is crashing in C [closed]For循环在C中崩溃[关闭]
【发布时间】:2013-07-28 17:40:11
【问题描述】:

编辑:哇。我在 scanf 函数中省略了“&”。不过感谢您的帮助。

我正在使用 Code::Blocks,我正在尝试构建一个简单的程序来提示用户输入 10 个数字,然后显示它们。问题是,它会打印问题,但是一旦我输入一个数字,它就会崩溃,而不是使用下面的 scanf()...代码来分配它。

main()
{
  int userNums[11] = {0};
  int x;
  char displayOrder = '\0';

  for (x = 0; x <= 10; x++)
  {
    printf("Enter a number: ");
    scanf("%d", userNums[x]); //code crashes here
  }
//code continues...

【问题讨论】:

  • 更改为&amp;userNums[x]
  • 编译上述代码时会收到警告。将警告视为错误。
  • 您应该阅读您正在使用的函数的documentation,而不是做出假设。
  • 谁支持这个愚蠢的问题??
  • 这个问题似乎离题了,因为它过于本地化,不太可能帮助其他人稍后搜索该网站。

标签: c for-loop codeblocks scanf


【解决方案1】:

修复:

scanf("%d", &userNums[x]); //code won't crash now

【讨论】:

  • 你能解释一下它为什么会崩溃吗?
  • @ShafikYaghmour 没有人允许,在我编辑之前,我看到其他十个答案的黄色闪光,快速投票:D
【解决方案2】:

Scanf 读取标准输入并将结果放入第二个参数。它必须是一个指针,因为该函数将获得您发送的变量的副本。

例子:

 int i;

 scanf("Enter a number here : %d", &i);
 printf("number is %d", i);

【讨论】:

    【解决方案3】:

    永远记住scanf() 的参数必须是地址(指针)。在您的情况下,userNums[x] 需要 &amp; 运算符。改变

    scanf("%d", userNums[x]);
    

    scanf("%d", &userNums[x]);
    

    userNums[x]前面的&amp;运算符将地址给scanf,用于存储用户输入的数据。如果没有&amp; 运算符(在这种情况下)scanf 找不到存储输入值的地址,因此您的程序将崩溃。

    【讨论】:

      【解决方案4】:

      改变一下

       scanf("%d", userNums[x]); //code crashes here
      

       scanf("%d", &userNums[x]); //code crashes here
      

      scanf 需要一个指针才能改变它的值

      【讨论】:

        【解决方案5】:

        你必须这样打电话给scanf()

        scanf("%d", &userNums[x]);
        

        说明:您希望scanf() 将用户给定的值分配给变量。由于在 C 中参数是通过副本传递的,因此您需要将变量的地址传递给scanf(),以便它可以修改它。要检索变量的地址,请使用&amp; 运算符:因此&amp;userNums[x]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-03
          • 2017-04-15
          相关资源
          最近更新 更多