C语言对于输入的格式管理 (即ACM题目中输入数据的处理)全篇干货!!!

转载自https://blog.csdn.net/sxhelijian/article/details/8978794

1.最简单的输入 (a+b)

运行效果:

Sample Input  
1 2  
  
Sample Output  
3  
#include <stdio.h>
int main()
{
	int a,b;
	scanf("%d %d",&a,&b);
	printf("%d",a+b);
	return 0;
}

太过简单就不多赘述了。

2.一行数据需要输入多组数据,读取到EOF为止。

我们的思路是写循环,条件为读取到EOF即终止循环(结束循环的条件)
在调试程序时,键盘输入的数据,用CTRL-Z(即按住CTRL键不放,再按下Z)组合作为输入结束,此谓键盘输入设备的“文件末尾”。
运行效果:

Sample Input  
1 5  
10 20  
400 516  
  
Sample Output  
6  
30  
916  
#include <stdio.h>
int main()
{
	int a,b;
	while(scanf("%d %d",&a,&b)!=EOF)//循环进行的条件
	{
		printf("%d",a+b);
	}
	return 0;
}

3. 一次运行,要输入多组数据,组数由第一个输入数据决定

思路:先输入一个N,以作为条件循环,作用到for循环,来达到执行N次循环的目的
运行效果:

Sample Input  
2  
1 5  
10 20  
  
Sample Output  
6  
30 
# include <stdio.h>
int main()
{
	int N;//需要几组数据
	int a,b;
	int i = 0;
	scanf("%d",&N);
	for(i=0;i<N;i++)
	{	scanf("%d%d",&a,&b);
		printf("%d",a+b);
	}
	return 0;
}

4. 输入不说明有多少组数据,但以某个特殊输入为结束标志0 0

思路:没啥子思路,大概我的想法是判断输入a b是否为0 0,但最初不知道怎么实现。先看代码,我再来讲解。

#include <stdio.h>
int main()
{
    int a,b;
    while(scanf("%d %d",&a, &b) &&(a||b))
    //输入a b,并且a b中不为0时
    //a||b 相当于a不为0 b也不为0 为0则返回F
	{
		printf("%d\n",a+b);
	}
	return 0;
}

解题关键在与a||b ,就是相当于a b都不为0时,返回T,否则相当于返回了F。

5.介绍一种牛逼的用法 利用文件重定向提高调试效率

在我们运行调试程序的时候,一定要输入数据,这让我们很不爽,那有没有一种方式可以预先在文件写好数据,然后读取重定向给我们的参数呢,答案是:可以。

用下面的形式调用函数freopen()会将标准输入stdin重定向到文件input.txt(这个名字可以自己定义)。
ps:使用前请在当前文件目录下新建xx.txt,否则是无法读取的噢

freopen("input.txt","r",stdin);    //设置输入和输出文件

重定向后,原先从键盘(标准输入的默认设备)接受的输入,将统统从文件读取input.txt读取,这就是重定向


#include<stdio.h>
int main()
{
	freopen("input.txt","r",stdin);  //只加这一句输入将被重定向到文件input.txt
	int a,b;
	scanf("%d%d",&a,&b);
	printf("%d\n",a+b);
	return 0;
}

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

怎么样,是不是感觉非常便捷,但是我是觉得这个方式没啥意义,当我们测试程序时,主要就是测试他的Bug,而你直接写死了,我怎么去尝试不同可能呢,一个程序运行成功,一定要是百分之百可行的,哪怕百分之九十九都是OK,但是有那百分之一,程序还是wrong。
呃呃呃 个人理解应该是种装逼用法把 !!!(别打我)

dame 就这样。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值