写这篇博客的起因是最近博主自己学习中总是遇到类似的错误,并曾百思不得其解。
今天分享出来是希望帮助大家在写代码时避免这些错误。话不多说,我们直接开始吧!
勤时当勉励 岁月不待人
C/C++ 游戏开发
功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。
# include
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);
}
这种用法我是墙裂建议大家在平时敲代码时不要去使用的,因为在使用过程中对用户非常不友好。但咱们这里是介绍用法,还是简单介绍一下,顺便讲讲改进的方法。
# include
int main(void)
{
int n;
scanf("n = %d", &i);
printf("n = %d\n", i);
return 0;
}
改进方法:
int main()
{
int n;
printf("请输入 n = ");
scanf("%d", &n);
printf("n = %d\n", n);
return 0;
}
# include
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 键的数量不限。一般使用一个空格即可。
int getchar(void)
返回类型为int,参数为void.
getchar返回的其实是字符的ASCII码值(整数)。
getchar在读取结束或者失败的时候,会返回EOF(end of file,本质上是-1.)。
#include
int main()
{
int n = 0;
while ((n = getchar()) != EOF)//判断返回值是否是EOF
{
putchar(n);//打印输入的n
}
return 0;
}
注意:
#include
int main()
{
char password[20] = {0};
printf("请输入密码:");
scanf("%s", password);//以字符串的形式输入
printf("请确认密码(Y/N):>");//用户输入Y/N确认
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
注意:
程序走到这一步后,进行第二次从键盘中读取( int ch = getchar() ),此时输入缓冲区中还滞留有上次未提前出来的“\n”,因此不再从键盘上读取数据,直接把“\n”从输入缓冲区提取出来。此时ch的地址中存放的就是“\n”,显然不等于’Y’,所以输出为“确认失败”
看了上面的讲解,你弄懂了吗?接下来我们来讲讲改进方法
int main()
{
char password[20] = { 0 };
printf("请输入密码:");
scanf("%s", password);
printf("请确认密码(Y/N):>");
getchar();//把多余的\n取走
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
请输入密码:12345 6(中间加空格)
#include
int main()
{
char password[20] = {0};
printf("请输入密码:");
scanf("%s", password);
while ( getchar() != '\n');//把缓冲区中多余的内容全读走,直到\n停止
printf("请确认密码(Y/N):>");
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
# include
int main(void)
{
char m;
int n;
scanf("%c%d", &m);
printf("m = %c, n = %d\n", m, n);
return 0;
}
以上就是今天要讲的所有内容啦
有任何疑问欢迎在评论区或者私信博主指出哦。
大噶(家)下次见啦!
如果感觉有帮助的话不妨三连一下这个新人博主。你们的支持就是我更新的动力。
(可莉请求你们三连支持一下博主!!!点击下方评论点赞收藏帮帮可莉吧)