【问题标题】:Can't get integer input in c无法在c中获取整数输入
【发布时间】:2017-02-02 10:27:20
【问题描述】:

我真的不知道出了什么问题。这可能是非常简单的事情,但我找不到错误。我用 C 写了这个非常简单的程序:

#include<stdio.h>

int main(void) {

    int n;
    scanf("%d", &n);
    printf("\n%d", &n);

    return 0;
}

但是当我运行它时,这就是我得到的:

1  // My input

-1936471972

我做错了什么?

提前致谢!

【问题讨论】:

  • printf("\n%d", &amp;n) n,而不是&amp;n
  • 您正在打印变量n 的位置,而不是它的值。
  • 而且更常见的做法是将newline 放在格式字符串的end 中,例如printf("%d\n", n);,当您使用printf调试提示。
  • @machine_1 真的那么混乱吗?除了 programming 错别字之外,我们通常会在这个跨国社区中忽略轻微的语言失误。

标签: c input int scanf


【解决方案1】:

我将发布其他人已经指出的内容:

int main(void) {

    int n;
    scanf("%d", &n);
    printf("%d\n", n);
              ^^  ^ 
    return 0;
}

如果您只想显示变量的值,请从 &amp;n 中删除 &amp;(您基本上是在打印变量的地址),然后移动 \n按照Weather Vane 的说明打印变量。

【讨论】:

  • 放大我上面的评论:通过stdout 的输出通常是缓冲的,当发送newline 时,该缓冲区会发送到输出设备。因此,如果您正在打印有关缺少最终newline 的程序状态的提示,并且您的程序崩溃,则先前的输出可能仍在缓冲区中,并且实际上并未发送到设备。这会使调试提示产生误导或无用。将newline 放在最后是一个好习惯。但是,如果在某些情况下您不想想要newline,您可以使用fflush(stdout);
  • @Weather Vane 确定使用stdout()。一个'\n'might not flush the output
【解决方案2】:

我真的不知道出了什么问题。

printf("\n%d", &amp;n); 使用"%d" 的打印说明符,它需要int&amp;nint地址。真正的好处是现代编译器和带有警告的编译器很好地启用了,会自动警告这个错误。这可以节省您的时间!不需要 SO 帖子。

熟练的编码人员使用编译器之类的工具,可以很好地发出警告,以提高效率并专注于编译器无法检测到的细微问题。使用printf("\n%d", n);printf("%d\n", n); 可能会解决今天的小问题,但使用更好的编译器环境确实值得学习。

【讨论】:

    【解决方案3】:

    使用它

    printf("%d\n", n);
    

    而不是

    printf("\n%d", &n);
    

    【讨论】:

      【解决方案4】:

      scanf 接受变量地址作为参数,而printf 接受变量值。尝试将行更改为

      printf("\n%d", n);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-26
        • 2022-07-11
        • 1970-01-01
        • 2019-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-26
        相关资源
        最近更新 更多