zoukankan      html  css  js  c++  java
  • 《手把手教你学C语言》学习笔记(7)---程序的输入与输出

      程序设计中,为了观察程序的运行状态和结构,需要输出指定的内容;为了让程序能够更加灵活,可以根据需求输入内容,让计算机处理和运行;所以程序的输入输出就显的尤为重要。主要包括printf和scanf函数。

      printf()函数的功能---将程序的运行结果输出显示到屏幕上;使用要点:

        1、需要使用#include <stdio.h>头文件

        2、printf()需要参数,将对应的内容作为字符串参数传入即可

      下面通过例子来说明:  

    1 #include <stdio.h>
     2 
     3 int main(int argc, char *argv[])
     4 {
     5     //其中的Hello jju!会原样不动的输出到屏幕上
     6     //
    是有特殊含义的,只是告诉程序,程序要换行,
     7     printf("Hello jju!
    ");
     8                                                                         
     9     return 0;
    10 }

      例子1表明,“”中的内容按原样输出到屏幕上, 只是让程序换了行

        3、printf()需要参数,应用占位符号,控制输出内容个格式和个数

      下面例子的执行结果为:

        The var1 and var2: 19  29
        The var2 and var1: 29  19

     1 #include <stdio.h>
     2
     3 int main(int argc, char **argv)
     4 {
     5     int var1 = 19;
     6     int var2 = 29;
     7
     8     printf("The var1 and var2: %d  %d
    ", var1, var2);
     9     printf("The var2 and var1: %d %d
    ", var2, var1);
    10
    11 return 0; 12 }

      例子2表明,“The var1 and var2:”中的内容按原样输出到屏幕上,包括在两个%d之间的空格都是原样输出而已, 依旧让程序换了行,而%d只是表明输出的是个10进制的数值,具体和后面的对应,由于var1的值为19,对应第一个%d,var2的值为29,对应第二个%d,因此输出的结果为19  29而已。

         4、printf()里面需要输出特殊符号,如%、、“怎么办,使用两个%%号就可以输出一个%了,其他的特殊符号,只要在前面加上转义符号即可

      结果为:

      百分号:%
      反斜杠:
      双引号:""

     1 #include <stdio.h>
     2
     3 int main(int argc, char **argv)
     4 {
     5     printf("百分号:%%
    ");
     6     printf("反斜杠:\
    ");
     7     printf("双引号:""");
     8
     9     return 0;
    10 }

    其中,例子3中的占位符号有以下几种:

      1、%d:按10进制整型数据的实际长度输出

      2、%ld:输出长整型数据

      3、%md:m为指定的输出字段的宽度,如果数据位数小于m,左端补上空格,如果数据位数大于m,按实际长度输出

      4、%-md:m为指定的输出字段的宽度,如果数据位数小于m,右端补上空格,如果数据位数大于m,按实际长度输出

      5、%u:输出无符号整型数

      6、%c:输出字符型数据

      7、%s:输出字符串,常常用来输出字符数组的内容或字符指针的内容,%s后面对应的需要是字符串的首地址

      8、%f:输出带小数点的数据,包括单精度和双精度类型,整数部分完整输出,默认对小数部分保留6位的四舍五入部分

      9、%.mf:与%f不同的一点就是指定输出的小数部分保留m位

      10、%o:按8进制数据的格式输出数据

      11、%x(或%X、%#x、%#X):按16进制数据的格式输出数据,当为X时,字母全是大写;当为x时,字母全是小写;当有#时,会在数据前面增加0x特征,没有#时,数据不会增加0x

    特别注意的就是:有小数的数据,如果强行用整型输出格式输出,有时会出现严重的错误。

    以下例子的结果为:

      十进制有符号输出:17 and -17
      十六进制特征输出:0x11 and 0X11
      十六进制无征输出:11 and 11
      八进制有符号输出:21 and 37777777757
      十进制无符号输出:17 and 4294967279
      指定宽度输出:17     and     17
      字符输出:a and 97
      长整型输出:65538 and 65538
      浮点数据默认输出: 3.141593
      浮点数据指定输出: 3.14159265358979311600
      ptr_cVar1内容为:This is a demo sample!
      ptr_cVar2内容为:This is too a demo sample!
      cArry的内容为:Hello, World!

    代码为:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4
     5 int main(int argc, char **argv)
     6 {
     7     int iVar1 = 17;
     8     int iVar2 = -17;
     9     long lVar = 65538;
    10     double dVar = 3.1415926535897932;
    11     char cVar = 'a';
    12     char* ptr_cVar1 = (char*)malloc(sizeof(char) * 50);
    13     strcpy(ptr_cVar1, "This is a demo sample!");
    14     char* ptr_cVar2 = "This is too a demo sample!";
    15     char cArry[] = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o'   ,'r','l', 'd', '!'};
    16     printf("十进制有符号输出:%d and %d
    ", iVar1, iVar2);
    17     printf("十六进制特征输出:%#x and %#X
    ", iVar1, iVar1);
    18     printf("十六进制无征输出:%x and %X
    ", iVar1, iVar1);
    19     printf("八进制有符号输出:%o and %o
    ", iVar1, iVar2);
    20     printf("十进制无符号输出:%u and %u
    ", iVar1, iVar2);
    21     printf("指定宽度输出:%-6d and %6d
    ", iVar1, iVar1);
    22     printf("字符输出:%c and %d
    ", cVar, cVar);
    23     printf("长整型输出:%ld and %d
    ", lVar, lVar);
    24     printf("浮点数据默认输出: %f
    ", dVar);
    25     printf("浮点数据指定输出: %.20f
    ", dVar);
    26     printf("ptr_cVar1内容为:%s
    ", ptr_cVar1);         //千万不要写成了*ptr_cVar1,需要字符串的首地址,使用字符串名称代替即可
    27     printf("ptr_cVar2内容为:%s
    ", ptr_cVar2);      //同上边的道理是一样的
    28     printf("cArry的内容为:%s
    ", &cArry);         //这里也是一样,不要写成了cArry
    29
    30     return 0;
    31 }
    是C语言的规定,如果你%c的格式,使用变量名称即可,其实也是使用变量的地址; 而如果使用%s格式,要求传入的就是一个字符串的首地址,所以只能用指针本身ptr_cVar1,而不能是指针的解析值*ptr_cVar1
    下面例子的结果为:
      Please input a number(0~100): 99
      Please input a char(a~z): c
      You input the number and char: 99 c
      The temp is 10 and 0xa
    代码如下:
     1 #include <stdio.h>
     2
     3 int main(int argc, char **argv)
     4 {
     5     int iVar;
     6     char cVar;
     7     printf("Please input a number(0~100): ");
     8     scanf("%d", &iVar);
     9     int temp = getchar();                          //这行代码必不可少,主要是scanf函数的缺陷的克服吧
    10     printf("Please input a char(a~z): ");
    11     scanf("%c", &cVar);
    12
    13     printf("You input the number and char: %d %c
    ", iVar, cVar);
    14     printf("The temp is %d and %#x
    ", temp, temp);
    15
    16     return 0;
    17 }

      对scanf函数的总结:

      1、输入参数需要地址参数,不要忘了&iVar的地址符号;

      2、函数的双引号内除了输入控制符号,和printf的控制符是一样的,最好不要加任何的内容;

      3、控制符的顺序和个数要完全一致;

      4、控制符的类型和顺序也要完全一致;

      5、最好在使用scanf函数前,使用printf函数给用户输出一个需要输入的提示信息

     
  • 相关阅读:
    P3383 【模板】线性筛素数
    【模板】矩阵乘法快速幂
    【模板】线性筛素数
    【模板】快速幂
    【模板】归并排序求逆序对
    【模板】归并排序模板
    luogu 1084 疫情控制
    luogu 3155 [CQOI2009]叶子的染色
    luogu 1453 城市环路
    luogu 2607 [ZJOI2008]骑士
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/6832176.html
Copyright © 2011-2022 走看看