C++读取输入问题(牛客ACM模式,vivo提前批笔试)

这篇记录vivo提前批笔试时,题目会做,但不知道怎么读取输入的惨痛经验。

写在开头

  1. 学会输入输出的写法很重要,尤其是C/C++。。。
  2. 据说用scanfprintf会比cincout快很多,因此尽量使用前者;

一行整数输入,空格间隔(个数未知)

输入描述:
一组空格分开分隔的员工工号列表
输出描述:
幸运员工总人数,未找到时输出0

这种情况下,需要每次读取并判断单个数字,并记录,最后输出。代码如下:

#include<bits/stdc++.h>
using namespace std
int main(){
	int id = 0; 
    while(scanf("%d", &id) != EOF){
        /* write your code here  */
    }
	return 0;
}

注意在本地调试时,应该输入crtl+z来中止输入。

多行整数输入,逗号间隔(个数未知)

输入描述:
第一行输入最大载重量C,是一个整数
第二行输入依次为每个集装箱的重量W(i),用整数表示,W(i)要小于等于C,用逗号“,”分隔
第三行输入依次为每个集装箱对应货物的价值V(i),用整数表示,用逗号“,”分隔
输出描述:
为一个整数,表示货运总价值

这种情况下,需要分别存储不同的数据(C,W(i)和V(i)),按行读取。代码如下:

#include<bits/stdc++.h>
using namespace std
int main(){
	vector<int> weight;//the weight of each container
    vector<int> value;//the value of goods in each container
    int c = 0;//maximum capacity
    char ch;
    scanf("%d", &c);
    int curr_w = 0;
    int curr_v = 0;
    do{
        scanf("%d",&curr_w);
        weight.push_back(curr_w);
        ch = getchar();
    }while(ch!='\n');
    do{
        scanf("%d",&curr_v);
        value.push_back(curr_v);
        ch = getchar();
    }while(ch!='\n');
    /* write your code here  */
	return 0;
}

首先读取C的值,再通过do-while循环依次读取每个集装箱的重量,直至getchar()捕获换行符\n,同理读取对应货物价值。

其他技巧

平时在本地调试程序时,往往需要输入输出多次才能得到正确结果。每次都需要按一串数字字符,效率很低。因此,在本地调试时,可以在读取输入前加上:

int main(){
	freopen("input.txt","r",stdin); 
	/* write your code here  */
	fclose(stdin);
}

再提前把输入写入txt文件,每次运行的时候就不再需要人为输入。记得提交之前将这两行注释,或者可以加上条件编译:

#define LOCAL_DEBUG
int main(){
	#ifdef LOCAL_DEBUG
	freopen("input.txt","r",stdin); 
	#endif
	/* write your code here  */
    #ifdef LOCAL_DEBUG
        fclose(stdin);
    #endif
}

待完成(其他类型输入)

如有错误,欢迎指正!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值