我有一个编写这个程序的项目,它读取一个字符,整数和一个浮点数。它还必须将字符转换为ASCII整数。除了关于ASCII号码的代码外,我模糊地理解了大部分内容。我自己创造了大部分内容但是当我转换角色时,我有一个伙伴帮助我,但他不是最好的解释这个。
任何解释都会非常有用,谢谢。我通过反复试验这一切......可能太长了:P
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char c;
int i;
float f;
printf ("Please enter a character: ");
scanf ("%c", &c);
printf ("Please enter an integer: ");
scanf ("%d", &i);
printf ("Please enter a floating point number: ");
scanf ("%f", &f);
printf ("\n");
printf ("The character you entered is: %c which is %d in integer-specification\n", c,c);
printf ("The integer you entered is: %d.\n", i);
printf ("The floating-point number you entered is: %f.\n", f);
return 0;
}
答案 0 :(得分:2)
有一个reference documentation of printf
方便有用。
当格式说明符为%c
时,printf
需要int
。 char
有效,因为它被提升为int
。
当格式说明符为%d
时,printf
需要int
。 char
有效,因为它被提升为int
。
对于第一种情况,printf
打印与int
的值对应的字符。
对于第二种情况,printf
只打印数字。
答案 1 :(得分:1)
基本上char
只是一个整数,范围从0到255,唯一能使它成为一个&#39;字符&#39;是我们已经指定了由某些数字表示的字符。
printf()
中发生的事情是,首先你告诉它你要传递char
并且只是输出要显示的那个字节,然后你说你希望它将整数转换为字符串并输出。
原因是ASCII码是字符。
注意:出于传递到vararg函数(例如printf()
char
和short
s的时候不重要的原因被提升为int
s。
答案 2 :(得分:1)
我试图解释这个问题。
程序存储器中的所有内容都存储为0和1(二进制数)的序列。您可能熟悉位和字节,但以防万一:二进制数字(0或1)是一个位。 8位序列是一个字节。诸如“A”,“b”,“1”等字符必须作为数字存储在存储器中。将字符映射到数字有不同的方法:EBCDIC(这些天非常罕见,过去在大型大型机上使用),UTF-8,UTF-16,UTF-32(Unicode类型),ASCII。这些映射称为字符编码,ASCII是最常用的。
因此,当您输入一个字符时,它将作为使用ASCII编码的整数存储在变量c中。因此,对应于变量的存储器位置的内容可以被视为字符和整数。
使用printf()函数时,您可以使用不同的可能表示请求打印相同的变量。在这种情况下,由于c是一个字符变量,可以表示为字符或数字,因此可以使用不同的格式说明符%c和%d分别打印为字符和整数。
上面第一个printf()调用需要3个参数。第一个参数是打印出来的字符串,以%开头的东西用于解释剩余的参数。 %c对应第二个参数,%d对应第三个参数。 %c说:“将第二个参数视为字符并打印出来。” %s说:“将第三个参数视为整数并打印出来。”
代码中的其他2个printf()调用只需要2个参数。第一个参数,即字符串,只包含一个以%(格式说明符)开头的内容,因此我们只需要使用格式说明符解释另外一个参数。
希望这有帮助。
答案 3 :(得分:0)
男人ascii会让你明白