C语言程序设计踩坑

  使用不管哪种程序设计语言刚开始都会踩并且需要到各种各样的坑,咸鱼博主最近准备软考途中需要复习以前学习到的一些知识所以顺带记录各种坑,希望在温故知新的同时能给一些遇到相同问题的同道提供帮助。

  在使用C语言写程序的时候我们可能会遇到一种情况,没有出现任何报错,编译运行都很顺利,但是在输入数据后回车无法继续运行,这时候就需要检查一下是不是scanf函数的使用问题了。

例如以下程序

#include<stdio.h>
//调用函数比较输入两个数字的大小并输出大数
int max(int x,int y)
{
	int k;
	//scanf("%d %d", &a, &b);
	if(x<y)
	k=y;
	if(y<x)
	k=x;
}
int main()
{
	int a,b,c;
	scanf("%d %d\n", &a, &b);
	c = max(a,b);
	printf("%d\n", c);
	
}

上面程序是输入两个数字并经过比较后输出较大的数字,但是输入数字后回车无效,必须输入字符才能继续往下运行。结果如下

出现以上结果的原因是:

\n在scanf中不表示等待换行符,而是读取并放弃连续的空白字符。事scanf格式串中的任何空白字符都表示读取并放弃空白字符。而且,诸如%d这样的格式也会扔掉前边的空白,因此你通常根本不需要在scanf格式串中加入显式的空白。因此,"%d\n"中的\n会让scanf读到非空白字符为止,而它可能需要读到下一行才能找到这个非空白字符。这种情况下,去掉\n仅仅使用"%d"即可,但你的程序可能需要跳过那个没有读入的换行符scanf函数是设计来读取自由格式的输入的,而在读取键盘输入的时候,你所得到的往往并不是你所想要的。"自由格式"意味着scanf在处理换行符的时候跟其他的空白一样。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值