C 控制台输出

学习C - C控制台输出

要使用C在控制台上显示消息,请使用printf()在控制台上写入消息。

printf()可以传递参数,使用%d表示整型数字,%f表示浮点数。

对于char数据类型,我们可以使用%c来传递参数。

这里是一个示例代码


  #include <stdio.h> 

  int main() { 
     int n = 10; 
     float m = 1.875; 
     char c =  "A "; 

     printf("%d \n",n); 
     printf("%f \n",m); 
     printf("% .2f \n",m); 
     printf("% .3f \n",m); 
     printf("%c \n",c); 
      
     return 0; 
  } 

上面的代码生成以下结果。

注意

您可以在%f上看到写入6位十进制数字的浮动数据。

您可以通过在点(.)后面传递数字来指定十进制数字,例如%.2f%.3f


//some floating-point combinations
#include <stdio.h>

int main(void)
{
    const double RENT = 1234.99;  // const-style constant
    
    printf("*%f*\n", RENT);
    printf("*%e*\n", RENT);
    printf("*%4.2f*\n", RENT);
    printf("*%3.1f*\n", RENT);
    printf("*%10.3f*\n", RENT);
    printf("*%10.3E*\n", RENT);
    printf("*%+4.2f*\n", RENT);
    printf("*%010.2f*\n", RENT);
    
    return 0;
}

上面的代码生成以下结果。

printf格式

printf()函数的原型是:

int printf_s(char *format, . . .);

第一个参数是格式控制字符串。此参数的参数通常作为显式字符串常量传递给函数。

函数的可选参数是要按顺序输出的值。数字和类型必须与格式转换说明符对应。

下表显示了可选输出标志字符如何影响输出。

字符使用
+确保有符号输出值之前总是有一个加号或减号。默认情况下,只有负值有一个符号。
-指定输出值左对齐,并填充右边的空格。输出的默认定位是正确的。
0指定整数或浮点值应用零填充而不是空格,以填充左侧的字段宽度。
#确保:0将在八进制输出值之前,0x或0X在十六进制输出值之前,浮点输出值将包含小数点,对于g或G浮点转换字符,尾随零将不会省略。
Space指定正值或零值前面加一个空格而不是加号。

可选的field_width指定输出值的最小字段宽度。

如果该值需要更多字符,则该字段将被简单扩展。

如果它要求小于指定的最小值,则填充空白,除非字段宽度前面有0标志。

可选的精度说明符通常用于浮点输出值,由一个后跟一个整数的句点组成。

.n的说明符表示要为浮点值输出n个小数位。

如果要输出的值大于n个有效数字,则舍入。

如果将其用于整数转换,则它指定出现在输出中的最小位数。

字段大小

可选大小标志如下表所示。

Flag影响
h以下整数转换说明符适用于短或无符号短参数。
hh以下整数转换说明符适用于signed char或unsigned char参数。
l以下整数转换说明符适用于long或unsigned long参数。
ll以下整数转换说明符适用于long long或unsigned long long参数。
j以下整数转换说明符适用于intmax_t或uintmax_t参数。
z以下整数转换说明符适用于size_t参数。
t以下整数转换说明符适用于ptrdiff_t参数。
L以下浮点转换说明符适用于长双参数。

您可以使用h前缀短类型。

%hd以小数形式显示一个小整数,而%ho显示一个小整数

因此,h和l前缀可以与u一起用于无符号类型。

例如,八进制形式。

用于打印无符号长类型的%lu符号。


#include <stdio.h> 
int main(void) 
{ 
    unsigned int un = 3000000000; /* system with 32-bit int */ 
    short end = 200;              /* and 16-bit short       */ 
    long big = 65537; 
    long long verybig = 12345678908642; 
 
    printf("un = %u and not %d\n", un, un); 
    printf("end = %hd and %d\n", end, end); 
    printf("big = %ld and not %hd\n", big, big); 
    printf("verybig= %lld and not %ld\n", verybig, verybig); 
 
    return 0; 
}    

上面的代码生成以下结果。

转换整数的字符

下表列出了整数输出规范中的转换字符:

转换字符生成输出
d 或 i带符号的十进制整数
o无符号八进制整数
u无符号十进制整数
x具有小写十六进制数字的无符号十六进制整数a,b,c,d,e,f
X作为x,但具有大写的十六进制数字A,B,C,D,E,F

以下代码显示字符的代码编号


#include <stdio.h> 
int main(void) 
{
    char ch; 
 
    printf("Please enter a character.\n"); 
    scanf("%c", &ch);   /* user inputs character */ 
    printf("The code for %c is %d.\n", ch, ch); 
 
    return 0; 
}    

上面的代码生成以下结果。

转换字符浮点型

下表列出了浮点型输出规范中的转换字符:

转换字符生成输出
f 或 F带符号的十进制值
e带指数的带符号的十进制值
E作为e,但E代表指数而不是e
ge或f取决于价值和精度的大小
G作为g,但E代表指数值
a 或 A以十六进制形式显示双值,十六进制值以0x或0X为前缀,任何以p或P为前缀的指数。

下表列出了指针的输出规范中的转换字符:

转换字符生成输出
p将值作为指针输出。

下表列出了字符输出规范中的转换字符:

转换字符生成输出
c单个字符或精确字符
s直到达到 '\0'或精度字符已输出的所有字符

#include <stdio.h>
int main(void)
{
    printf("%x %X %#x\n", 31, 31, 31);
    printf("**%d**% d**% d**\n", 42, 42, -42);
    printf("**%5d**%5.3d**%05d**%05.3d**\n", 6, 6, 6, 6);
    
    return 0;
}

上面的代码生成以下结果。

转义序列

您可以在printf()的格式控制字符串中包含空格字符。

空格字符是换行符,回车符,换页,空格和制表符。

其中一些由转义序列表示,这些如下表所示。

转义序列描述
\b退格
\f换页或页弹出
\n换行
\r回车(打印机)或移动到当前行的开头输出到屏幕
\t水平制表符

您使用转义序列\\输出反斜杠字符\。

要将一个%字符写入stdout,您可以使用%%。

整数输出

我们首先尝试一个整数输出格式的样本。


#include <stdio.h> 

int main(void) 
{ 
  int        i = 15,       j = 123,            k = 4567; 
  long long li = 56789LL, lj = 12345678901LL, lk = 23456789LL; 
  
  printf("i = %d   j = %d    k = %d   i = %6.3d   j = %6.3d   k = %6.3d\n", 
         i ,j, k, i, j, k); 
  printf("i = %-d   j = %+d   k = %-d   i = %-6.3d   j = %-6.3d   k = %-6.3d\n",
         i ,j, k, i, j, k); 
  printf("li = %d   lj = %d   lk = %d\n", li, lj, lk); 
  printf("li = %lld   lj = %lld   lk = %lld\n", li, lj, lk); 
  return 0; 
} 

上面的代码生成以下结果。

填充

以下示例显示了填充和宽度控制。


#include <stdio.h> 

int main(void) 
{ 
  int k = 678; 

  // Display formats as heading then display the values 
  printf("%%d   %%o   %%x   %%X\n"); 
  printf("%d  %o  %x  %X\n", k, k, k, k ); 
  printf("\n|%%8d       |%%-8d      |%%+8d      |%%08d      |%%-+8d     |\n"); 
  printf("|%8d  |%-8d  |%+8d  |%08d  |%-+8d  |\n", k, k, k, k, k ); 
  return 0; 
} 

上面的代码生成以下结果。

输出浮点值

以下代码显示了浮点输出选项。


    #include <stdio.h> 

    int main(void)     { 
      float  fp1 = 345.678f,    fp2 = 1.234E6f; 
      double fp3 = 234567898.0, fp4 = 11.22334455e-6; 
      
      printf("%f  %+f  %-10.4f  %6.4f\n", fp1, fp2, fp1, fp2); 
      printf("%e  %+E\n", fp1, fp2); 
      printf("%f  %g  %#+f  %8.4f  %10.4g\n", fp3,fp3, fp3, fp3, fp4); 
      return 0; 
    } 

上面的代码生成以下结果。

字符输出

printf()有两个字符数据选项:单个字符为%c,字符串为%s。

%lc和%ls用于输出宽字符。


    #include <stdio.h> 
    #include <limits.h>               // For CHAR_MAX 
    #include <ctype.h>                // For isprint() 

    int main(void) 
    { 
      int count = 0; 
      
      printf("The printable characters are the following:\n"); 
      // Iterate over all values of type char 
      for(int code = 0 ; code <= CHAR_MAX ; ++code) 
      { 
        char ch = (char)code; 
        if(isprint(ch)) { 
          if(count++ % 32 == 0) 
            printf("\n"); 
          printf(" %c", ch); 
        } 
      } 
      printf("\n"); 
      return 0; 
    } 

上面的代码生成以下结果。

例子

以下代码显示如何打印长字符串。


#include <stdio.h>
int main(void)
{
    printf("Here"s one way to print a ");
    printf("long string.\n");
    printf("Here"s another way to print a \
long string.\n");
    printf("Here"s the newest way to print a "
           "long string.\n");      /* ANSI C */
    
    return 0;
}

上面的代码生成以下结果。

例2

printf()返回打印的字符数。


#include <stdio.h> 
int main(void) 
{ 
    int bph2o = 212; 
    int rv; 
 
    rv = printf("%d F is water"s boiling point.\n", bph2o); 
    printf("The printf() function printed %d characters.\n", 
             rv); 
    return 0; 
}    

上面的代码生成以下结果。