在说之前,希望先准备一张ASCII码表 (我上次写的小程序也可以凑合着用,我写的是标准ASCII码0~127位) 先谈一下char类型,它是字符类型 也就是专门用来存储字符的 然而我前几章说过 机器只能存储数值 那么这就是ASCII码表的作用 将字符转换为数值存入,再转换为字符读出 %c是标准输入输出占位符中的字符格式占位 也就是说,我们可以进行诸如 这样的字符数据操作 那么这里就有一个问题 如图: 问:当我输入‘1’时,结果为什么是49? 答:看一下ASCII码表,字符‘1’对应的值为49 也就是说,此时你输入的不再是数值,而是字符 字符可以进行运算吗? 可以 但如果你写 ‘1’+‘2’=? 它会给你一个字符‘c' 为什么? 这就相当于49+50=99 而99所对应的字符是’c' 可以试一试 没问题 但是众所周知1+2=3 所以,当进行输入时,切记到底是数值还是字符 如果想将字符转换成数值的话,需要写转换程序,帖子后面的附件中有,但是希望能自己先打一份,再来比对 还有一种字符输入输出的方式 getchar() putchar() 也是一对但其形式稍有不同 x=getchar(); putchar(x); (PS:这牵涉到函数的传参与返回值问题,暂可不必深究) 如: 换行符,在ASCII码中也有定义,也就是说,机器把它也当成字符 感兴趣可以对照ASCII码表试试 可是,在自然界中,单单一个符号表达能力非常有限 于是就有了字符串的概念 可以理解为穿成串的字符 学习了字符我们可以模拟这个过程 如: (这里a[0]没有用,所以输出时将a[0]跳过了) 没问题,但是非常繁琐 用到了两个循环 现在,有一个更简单但只适用于玩具程序的输入输出语句 gets(x); puts(x); 这是一对字符串输入输出函数 gets()比scanf()有一个优点,就是可以输入空格 (例子略,可以自己去试试) 有了这一组函数,我们就可以非常轻松地进行输入输出 如: 但是有两个问题 1.数组当中单单写出a代表什么 2.puts()为什么输到‘d'就停了 答1:上章我们说到数组开辟的是连续的空间,当写a(数组名)时就代表整个数组起始的地址(房号) gets()只需要进行依次输入就可以 答2:因为有'\0'这个符号限制输出,当puts()读到“尾零”时自动停止输出并加上'\n' 那么尾零哪来的? gets加上的,他将我们输入的'\n'换为了'\0' 上上面的例子告诉我们当你输入完字符串时会进行回车,那个例子也就是用这种习惯进行逻辑循环 尾零,也算是一种字符,它也需要存储空间 所以,当你计算数组大小时要所有字符+1 这个1,就是给尾零留的 如: 这就是尾零的作用 (此处整体赋值时,花括号可以省略,字符串一般用“”(双引号)表示,字符一般用‘’(单引号)表示) 为了使字符串的处理变得更方便 C语言还有一个库文件,专门用来处理字符串 <string.h> 一些相对重要的函数如 strcat(字符串数组名,字符串); strcpy(字符串数组名,字符串); strcmp(字符串1,字符串2); strlen(字符串); 等,在上方连接中都有其具体用法,而且介绍也比较详细,在此就不赘述了。 (PS:它写的括号中的东西暂时用上述汉字取代,以后会说到,感兴趣可以去看看指针与函数这两章)
小结: 输入两组学生信息,并输出 参考程序,见附件
|