C测验程序不明白

时间:2015-02-28 13:38:32

标签: c++ c

朋友你好任何人都知道为什么打印变量值为什么不打印垃圾值?它给出了输出11 10 5

void main()
{
      int a=5,b=10,c=11;
      printf("%d %d %d");
      getch();
}

3 个答案:

答案 0 :(得分:1)

程序有不确定的行为。

根据C标准

  

如果格式的参数不足,则行为为   未定义

例如,在www.ideone.com上运行您的功能我得到以下结果

-1081083132 -1081083124 -1219330483

因此,您的编译器似乎生成了对象代码,使得main中的局部变量被偶然调整,使得它们适合printf的堆栈。

答案 1 :(得分:1)

是印刷垃圾。事实是你的垃圾包含值5,10和11,这就是它们被打印的原因。尝试在其他地方执行此代码,或在清理后在自己的机器中执行。

这里,我得到0,10032928,4199093作为输出。

答案 2 :(得分:0)

尝试将printf语句更改为:

    printf("%d %d %d", a, b, c)

printf命令的第一个参数称为格式字符串,它告诉运行时如何打印内容。在您的情况下,您声明要打印由单个空格分隔的三个整数。但是,在原始程序中,您没有告诉运行时要打印的值。

您可以将以%(如%d,%c或%f)开头的内容视为占位符,这些占位符将由格式字符串后面的参数填充。这有一些例外,但现在它应该很好地为你服务。

这里要记住两件事;

  1. 如果格式字符串中有5个占位符,则需要为printf提供另外五个参数来表示替换这些占位符的数据。这就是来自莫斯科的' Vlad'从C标准中显示出来。

  2. 在占位符中编码是预期的数据类型; %c是一个字符的占位符,并且传递一个浮点数将产生编译器诊断以及运行时的异常行为。

  3. 您可以找到更多关于format strings here

    的内容