在C语言中需要重视的语法问题一——scanf

本文详细介绍了scanf函数在C语言中的使用,包括输入语法、分别输入变量值时的换行处理、字符与字符串的混合输入,以及在VSCode中scanf_s函数的特殊情况。
摘要由CSDN通过智能技术生成

在写代码的过程中有时候scanf函数的使用会出现一些语法问题,故写一篇博客来总结其的用法。

1.输入语法

    int a = 0;
	scanf("%d", &a);

在输入a时前面需要加上&以取到a的地址,

而值得一提的是若scanf中有其他并非占位符的元素出现,也需要将其一起输入,不然则会报错

    int a ;
	scanf("请输入%d", & a);

2.分别输入变量的值

当分别输入时,由于在输入完第一个数字变量后要按回车键,此时若第二个输入的若为字符变量,则会自动读取enter也就是换行符\n

代码演示:

	int a;
	char i;
	scanf("%d", &a);
	getchar();
	scanf("%c",&i);
   	printf("%d ---%c---", a,i);

运行结果:

将---给换到了下一行,即证明了i为\n,为了正确输入,则需要加入getchar()将给\n给吞掉

代码演示:

    int a;
	char i;
	scanf("%d", &a);
	getchar();
	scanf("%c",&i);
   	printf("%d ---%c---", a,i);

结果:

3.输入多个变量的值

1.字符

若字符与数字可以一起输入,但字符与字符不行,不知道为什么,但若两个字符一起输入,第二个字符的值总是显示?。

如:

    char i,j;
	scanf("%c %c",&i,&j);//中间有空格
    printf("%c %c", i,j);

运行结果为:

解释:

 scanf会读取所有字符包括空白字符。但是他会在读取到第一个空白字符后结束读取。将空白字符之后的所有字符都暂存在缓冲区中。

将scanf()中空格删掉即可成功运行

代码:

	char i,j;
	scanf("%c%c",&i,&j);//没加空格,若在第一个%c前加空格也没事
    printf("%c %c", i,j);

结果:

但有一个问题,如果你使用的编程软件是vscode,其输入函数是scanf_s,就算将空格字符删掉,b依旧为?,这个时候需要引用 #define _CRT_SECURE_NO_WARNINGS (需放在首行),就可以使用scanf()函数,但若你坚持使用scanf_s,其具体解决方法我并不是很清楚,只能分开输入,并在中间加一个getchar()

2.字符串

scanf会读取除了空白字符以外的所有字符,并在读取到第一个空白字符时结束读取,将空白字符之后的所有字符都暂存在缓冲区中。除非缓冲区被刷新或者字符被读取走,否则将一直停留在缓冲区中。

在数字与字符串的占位符之间空格可有可无。

但对于字符串与字符则必须要有空格(当字符串在前面的时候),若没有空格仅会输出字符串

正常输入

	char j;
	char i[20];
	scanf("%s %c",i,&j);//有空格
    printf("%s %c", i,j);

结果:

如果没有空格

结果为:

但若当字符在前面的时候可以不用管空格

	char j;
	char i[20];
	scanf("%c%s", &j, i);//没加空格

结果:

但由于scanf()函数输入%c的原因,还是最好不加空格。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值