前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >新手C语言学习(1)

新手C语言学习(1)

作者头像
半生瓜的blog
发布2023-05-12 20:55:23
2950
发布2023-05-12 20:55:23
举报
文章被收录于专栏:半生瓜のblog半生瓜のblog

新手C语言学习(一)

        在昨天的c语言学习中所发现值得积累的东西。         首先,在vs2017中,无法识别scanf困扰了我一下,于是我去网上搜索解决办法,借鉴这位老哥一下(链接)就是依次点开项目-属性-c/c+±预处理器,然后_CRT_SECURE_NO_WARNINGS输入,应用就完事了。         归咎其原因,就是微软认为scanf不安全,于是在此之前我又在网上搜,说把scanf改成scanf_s就可以,我也就没仔细了解,反正在后面加了个_s倒是不报错了,结果在运行代码的时候,虽然可以运行,但却一直会有个弹窗

在这里插入图片描述
在这里插入图片描述

        我又去企鹅群里询问大佬,原来并不是scanf_s的问题,而是我在定义变量的时候出了问题,将一串字符串往字符变量里面怼,所以就出现了这个报错问题。之后更改,问题终于成功解决了。         我的代码如下:

代码语言:javascript
复制
#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上打完回车就换个行,不继续进行运行,

在这里插入图片描述
在这里插入图片描述

暂时还不知道产生的原因。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 新手C语言学习(一)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档