c++输入流如何限制输入长度_互联网秋招笔试如何读取输入(python&C)

问题阐述:
通过参加近3次笔试(阿里、字节跳动、网易)发现
机考的编译界面不同于leetcode(已经给出部分代码,不需要读取,直接用即可)
机考类似于华为机考,需要从零开始,包括读取输入

bbf4252cba5148555747204b597fb232.png

Bug:读取错误

在读取的时候,本地可以运行的代码却总是会报这个错误
EOFerror:EOF when reading a line

5027bbb8440ab7d0bdf6ec79f11256b0.png

a1b3d43712147427fb9d72c1635bbfe9.png

解决这个问题的最好方式是采用try和except语法

list1 = []
while True:
    try:
        number = input()
        if(number == ""):
            break
        list1.append(number)
    except EOFError:
        break

for i in list1:
    print(int(i,16))

273f529b5d5f9d886652e1b996dcc358.png

读取多行数据可以采用上面所示代码的结构,while大循环里套上try

原 因 溯 源

产生这个bug的原因是因为机考测试不是人为手动输入测试案例,而是使用管道将输入传进测试的python脚本里,如下

5738a032b7dd25da7c827e1ad7395098.png

0655d6fbeed6f8ebf5a2d5b7ebf1d4ad.png

由于EOF无法通过管道被传输,所以会报错,针对于此。牛客特别提供了一套输入输出的测试练习题,链接如下

牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ​ac.nowcoder.com

解析同时附上

牛客OJ在线编程常见输入输出练习(python版)_qq_41023125的博客-CSDN博客_牛客在线oj输入输出联系​blog.csdn.net
b3afdf12b1c038a12581d167f9bea092.png

下面为笔试机考C的时候遇到的输入问题,可采用以下方式正确读取

单行读取数字

cf9e4f855cb8e2aa59bc35930a1955c6.png
int main(void)
{
    int a, b;
    scanf("%d %d",&a,&b);
    return 0;
}

单行读取字符串

6a5020c1ae56443f9af2c4c2577072cc.png
#include <stdio.h>
#include <string.h>
int main()
{
    char str[1000];
    gets(str);
    return 0;
}

多行读取数字

可以参考此题排名第一的题解写法

矩阵乘法_牛客网​www.nowcoder.com
#include <stdio.h>
int main()
{
    int x,y,z;
    int a[50][50]={0};
    int b[50][50]={0};
    while(scanf("%d%d%d",&x,&y,&z)!=EOF)
    {
        for(int i=0;i<x;i++)
        {
            for(int j=0;j<y;j++)
                scanf("%d",&a[j][i]);
        }
        for(int i=0;i<y;i++)
        {
            for(int j=0;j<z;j++)
                scanf("%d",&b[j][i]);
        }
        for(int i=0;i<x;i++)
        {
            for(int j=0;j<z;j++)
            {
                int sum=0;
                for(int k=0;k<y;k++)
                    sum+=a[k][i]*b[j][k];
                printf("%d ",sum);
            }
            printf("n");
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值