1

我无法为以下代码的输出给出适当的理由。有谁能够帮助我。

int main()
{
  int i;
  char ch;
  scanf("%c",&i);
  scanf("%d",&ch);
  printf("%d\n%c",i,ch);
  return 0;
}

输入输出:

input: 
a
45
output:
0
-
4

3 回答 3

3

您正在将 a 读int入 a char。假设sizeof(int) != sizeof(char),这将导致scanf超出结尾的写入,ch并产生未定义的后果。

您应该使用参数的%i格式说明符int%cforchar参数

int main()
{
  int i;
  char ch;
  scanf("%c",&ch);
  scanf("%d",&i);
  printf("%d\n%c",i,ch);
  return 0;
}
于 2013-07-25T15:43:57.043 回答
1

不要对scanf或说谎printf。没有什么好的结果。

在这种情况下,您试图将 4 个字节填充到 1 的空间中——这显然不起作用,无论您挤压多少。您的程序没有崩溃的事实纯粹是运气。

于 2013-07-25T16:12:33.357 回答
0

这是未定义的行为。您试图通过告诉编译器弹出和推送不同的东西来混淆编译器,它应该分别在printfscanf声明中。

于 2013-07-25T16:01:48.980 回答