一.scanf的用法
- 我们先来看看再MSDN里对scanf的解释
- scanf 的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。 - 下面来讲讲它的两种基本用法:
1. scanf(“输入控制符”, 输入参数);
功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。
- 在通常情况下,我们不希望某个值是由我们程序员指定的,而是在程序运行中由用户从键盘输入的,这更能满足在日常使用时用户的需要,提高我们程序的灵活性
- 用 scanf 即可实现即可很好的满足我们的要求:
# include <stdio.h> int main() { int n=0; scanf("%d", &n); //&n 表示取变量 n 的地址,&是取地址符 printf("n = %d\n", i); return 0; }
- 上面这个基本的程序中,有以下两点需要注意:
- (1)我们从键盘输入的全部都是字符。比如从键盘输入 125,它表示的并不是数字 125,而是字符 ‘1’、字符 ‘2’ 和字符 ‘5’。
操作系统在接收键盘数据时会将它当成字符来接收。这时就需要用“输入控制符”把它转化成相应的内容(如%d 是有符号十进制数 %f 是浮点数)。
- 上面代码中的%d就是要将从键盘输入的这些合法的字符转化成对应的十进制数字。比如经过 %d 转化之后,字符 125 就是数字 125 了。
- (2)&是一个取地址运算符,&加变量名表示“该变量的地址”,所以&n就表示变量 n 的地址。又称为“取地址n”,相当于将数据存入以变量 n 的地址为地址的变量中(即存入变量n的地址中)。也就是把转化后的数字125放到变量 n 中
- 总的来说
scanf 语句的意思就是:从键盘上输入字符 125,然后%d将这三个字符转化成十进制数 125,“&n” 找到变量 n 的地址,把数字 125 放到以变量 n 的地址为地址的变量中,即变量 i 中,所以最终的输出结果就是n=125。
注意:
int main() { char n[20] = {0}; printf("请输入:>"); scanf("%s", n); }
很多初学者看到这段代码可能会想:这个scanf中没有加&n,会不会是错的?
恭喜你!!!---------------------------------------------------回答错误
我们要透过代码看到其本质,这段代码在使用时,是把输入的字符串放到一个名字为n的char类型的数组的首地址中,而不是变量n中,把输入值放在地址里,当然是对的。
2.scanf(“输入控制符非输入控制符”, 输入参数)
这种用法我是墙裂建议大家在平时敲代码时不要去使用的,因为在使用过程中对用户非常不友好。但咱们这里是介绍用法,还是简单介绍一下,顺便讲讲改进的方法。
# include <stdio.h> int main(void) { int n; scanf("n = %d", &i); printf("n = %d\n", i); return 0; }
在 scanf 中,所有的“非输入控制符”都要原样输入。
接下来我来讲讲为什么不推荐使用这种用法
这种输入方法必须满足原样输入,当用户使用时,但凡输入的和你设置的格式有一点不同都不行,哪怕只是多或者少了一个空格。
比如要从键盘给变量 n 赋值 123,那么必须要输入n=123才正确,少一个或者多一个都是错误的。
改进方法:
int main() { int n; printf("请输入 n = "); scanf("%d", &n); printf("n = %d\n", n); return 0; }
通常在输入前我们加上类似“请输入 n = ”这种代码的目的是提示用户应该输入什么内容,改善用户的使用体验。
具体效果
这样改进既改进了我们的输入格式,又不至于在使用scanf时出错。
输入多个参数
# include <stdio.h> int main(void) { int m, n; scanf("%d%d", &m, &n); printf("m = %d, n = %d\n", m, n); return 0; }
通过键盘给多个变量赋值与给一个变量赋值其实是一样的。比如给两个变量赋值就写两个 %d,然后“输入参数”中对应写上两个 “取地址变量” ;给三个变量赋值就写三个 %d,然后“输入参数”中对应写上三个 “取地址变量” ……
从键盘输入数据时,给多个变量赋的值之间一定要用空格、回车或者 Tab 键隔开,用以区分给不同变量赋的值。而且空格、回车或 Tab 键的数量不限。一般使用一个空格即可。
3.scanf的返回值
scanf的返回值我有一篇博客有具体介绍,这里不过多缀叙,博客链接如下:关于C语言中scanf多组输入的实现
二.getchar的用法
1.getchar的返回类型及使用效果
getchar常用来读取字符
以下为msdn中的解释
int getchar(void)
返回类型为int,参数为void.
getchar返回的其实是字符的ASCII码值(整数)。
getchar在读取结束或者失败的时候,会返回EOF(end of file,本质上是-1.)。
接下来通过代码简单解释一下
#include<stdio.h> int main() { int n = 0; while ((n = getchar()) != EOF)//判断返回值是否是EOF { putchar(n);//打印输入的n } return 0; }
注意:
使用getchar时,每次getchar只会读取一个字符
如果上面的代码不用while循环的话,输入123,putchar就只会输出1。