需要一些帮助来理解char-> ASCII和一些基础知识

时间:2015-09-16 02:30:41

标签: c project

我有一个编写这个程序的项目,它读取一个字符,整数和一个浮点数。它还必须将字符转换为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;
}

4 个答案:

答案 0 :(得分:2)

有一个reference documentation of printf方便有用。

当格​​式说明符为%c时,printf需要intchar有效,因为它被提升为int

当格​​式说明符为%d时,printf需要intchar有效,因为它被提升为int

对于第一种情况,printf打印与int的值对应的字符。

对于第二种情况,printf只打印数字。

答案 1 :(得分:1)

基本上char只是一个整数,范围从0到255,唯一能使它成为一个&#39;字符&#39;是我们已经指定了由某些数字表示的字符。

printf()中发生的事情是,首先你告诉它你要传递char并且只是输出要显示的那个字节,然后你说你希望它将整数转换为字符串并输出。

原因是ASCII码字符。

注意:出于传递到vararg函数(例如printf() charshort 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会让你明白