新手C语言学习(一)
在昨天的c语言学习中所发现值得积累的东西。 首先,在vs2017中,无法识别scanf困扰了我一下,于是我去网上搜索解决办法,借鉴这位老哥一下(链接)就是依次点开项目-属性-c/c++-预处理器,然后_CRT_SECURE_NO_WARNINGS输入,应用就完事了。 归咎其原因,就是微软认为scanf不安全,于是在此之前我又在网上搜,说把scanf改成scanf_s就可以,我也就没仔细了解,反正在后面加了个_s倒是不报错了,结果在运行代码的时候,虽然可以运行,但却一直会有个弹窗 我又去企鹅群里询问大佬,原来并不是scanf_s的问题,而是我在定义变量的时候出了问题,将一串字符串往字符变量里面怼,所以就出现了这个报错问题。之后更改,问题终于成功解决了。 我的代码如下:
#include <stdio.h>
int main(void)
{
//定义字符变量
char prove;
//数组 字符串
char password[20] = { 0 };
printf("请输入密码:");
//数组本身就是地址不用加&
scanf("%s", password);
//回收\n防止他干预下面的接收
//在代码运行窗口输入的回车也会被当做字符而被获取
getchar();
printf("请确认密码Y/N:");
prove = getchar();
if (prove == 'Y')
printf("确认成功");
else
printf("确认失败");
return 0;
}
在这之中,就是getchar的用法比较重要,在代码运行窗口输入的回车,也会被当做字符而被获取,这就不得不提到缓冲区这个概念了,我们输入的东西,会先被系统放到缓冲区上,然后getchar()会在缓冲区读取我们所输入的东西,一次只能获取一个东西,因为也会把回车当做字符而获取,所以要让他停下来就要在之后加入一个getchar()将缓冲区的\n(回车)清空,才可以顺利地执行下一个命令参考这位老哥链接。
我还发现了一个问题就是,有时在scanf下可以顺利运行的代码,但在scanf_s上打完回车就换个行,不继续进行运行, 暂时还不知道产生的原因。
评论区