读整数为字符&将其打印为整数

时间:2017-11-22 17:33:35

标签: c scanf

输入 65 时,此代码段的输出 32566 。 请解释它背后的概念。

#include<stdio.h>

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

4 个答案:

答案 0 :(得分:3)

在您的代码中

parameter_list = %w[from to foo]
value_list = %w[2005-01-01 2005-03-31 bar]

form_data = parameter_list.zip(value_list).to_h

p form_data
# {"from"=>"2005-01-01", "to"=>"2005-03-31", "foo"=>"bar"}
req.set_form_data form_data

导致undefined behavior。您正在向 scanf("%c", &i); 转换说明符提供无效类型的参数。

%c需要一个指向字符类型的指针作为对应的参数,但是你提供了一个指向整数的指针。

答案 1 :(得分:2)

使用错误的格式说明符调用未定义的行为。在这里,你正在做同样的事情。

您应该像这样阅读

scanf("%d",&i); // because you are reading an integer. 

在你的情况下你写

scanf("%c", &i); 

您传递的是int变量的地址,但此处%c应该获取char变量的地址。这种差异给出了未定义的行为。

为了更好地了解您的想法 - scanf需要格式指示符和地址。从地址开始,scanf()无法理解需要解析的数据类型。但是,格式说明符告诉我。所以在这种情况下,传递错误的格式说明符会搞砸。

答案 2 :(得分:1)

enter image description here

你忘了初始化变量'i'。比程序正确运行

答案 3 :(得分:-2)

您的程序会读取字母&#39; A&#39;的ascii代码。如果您更改格式符号&#39;%d&#39; in&#39;%c&#39;而输出是&#39; A&#39;。

如果您将变量i初始化为0.输出为65,如果输入&#39; A&#39;