输入 65 时,此代码段的输出 32566 。 请解释它背后的概念。
#include<stdio.h>
int main()
{
char ch;
int i;
scanf("%c", &i);
printf("%d",i);
return 0;
}
答案 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)
你忘了初始化变量'i'。比程序正确运行
答案 3 :(得分:-2)
您的程序会读取字母&#39; A&#39;的ascii代码。如果您更改格式符号&#39;%d&#39; in&#39;%c&#39;而输出是&#39; A&#39;。
如果您将变量i初始化为0.输出为65,如果输入&#39; A&#39;