多行输入以及结束输入

这篇文章大多是总结前辈的经验,让自己可以更好的认识这个问题,在文章背后都有原文链接

1.多行输入数据

一般题中要求输入多组数据的意思就是读取数量不定的输入数据(不能确定输入数据的数量),在这种情况下,需要不断读取数据直至没有新的输入为止。

#include <stdio.h>
int main()
{
    int a;
    while(scanf("%d",&a)!=EOF)
    {
        printf("%d\n",a);
    }
    return 0;
}

上面是使用C语言的的方法,把输入语句作为while循环的判断条件,当输入数据不是文件结束符(EOF)的时候,就可以实现连续输入
没有明确指出输入什么时候结束
如果是这种情况,我们默认是以“文件结束”(EOF)为结束标志。
可以将上述的EOF改为’\n’,里面改为printf(’’%d,a’’),表示为输入不为换行时持续输入,保证一行输入多个不定量数据。

#include <iostream>
using namespace std;
int main()
{
    for(int i;cin>>i;)
    {
        cout << i << endl;
    }
    return 0;
}

方法二是用C++for循环实现,将输入语句作为for循环的condition部分,而expression部分省略不写,因为条件部分能改变i的值,所以这个循环无需表达式部分,其中,条件部分不断检查输入流的内容,只要读取完所有的输入或者遇到一个输入错误就终止循环

在另一个博主的文章里也总结了如何实现输入不定量数据,链接在文章最后,在这里直接复制粘贴他的总结一下,以便将问题得到更多方法的解决。

C语言
1.知道输入数据组数n
scanf("%d",&n);
whlie(n–){
这里处理每一组输入.然后直接按格式输出,没必要开数组存储答案.
}
2.没有数据总数,以EOF结束
可能用的几个函数:
scanf():
while(scanf("%s|%d")!=EOF){
处理每一组数据,并输出.
}
getchar():读入一个字符
whlie((ch=getchar())!=EOF){

}
gets():读入一行
while(gets(buf)!=NULL) {

}
用getchar,gets注意读入换行符.
3.以0或-1结束的输入.
while(scanf("%d",&n),n!=0) {

}

关于C++的输入输出处理
cin读字符串时遇到空白符(空格,换行等)结束
char str[BUFFER];
while (cin >> str) {
}
getline读字符串时遇到换行符结束,用于读一整行
char str[BUFFER];
while (cin.getline(str, BUFFER)) {
}
string str;
while (getline(cin, str)) {
}

cin/cout要比scanf/printf慢一些,尽可能使用scanf/printf以避免测试大量数据时因为输入输出慢而导致TLE. putchar/getchar要比scanf/printf更快

2.多行输入字符串

包含其他输入后读入多行字符串
例如一些编程题要求先输入字符串行数,然后再一行一行读入字符串。如果正常顺写编程的话,会发现第一行字符串读入的是空,后续才能正常录入每行字符串。
  这是因为第一行输入一个int数据后,换行符并没有被忽略,直接被准备读入第一行字符串的getline俘获。
  所以需要在第一行输入一个int数据后,调用cin.ignore()忽略下面的一个流录入,将其抛弃。

    int N;
    cin>>N;
    cin.ignore();  //取消换行键的读入
    string strCinLine[100];
    for(int i =0;i<N;i++)
        getline(cin,strCinLine[i]);

或者给strCinLine动态申请空间,节省空间开销。

    int N;
    cin>>N;
    cin.ignore();  //取消换行键的读入
    string* strCinLine = new string[N];
    for(int i =0;i<N;i++)
        getline(cin,strCinLine[i]);

    delete []strCinLine; //记得释放动态空间
    strCinLine = NULL;

3.EOF妙用

在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。

main()
{
     int c;
    c=getchar();
    while(c!=EOF)putchar(c);
          c=getchar();
     }
}

当没有输入的时候,getchar会返回一个特殊值,这个值就是EOF。

4.采用总结所用到的文章

ACM 新手入门 之 如何实现多组输入输出
C/C++中输入多组数据方法
C/C++读入多行字符串string
后面的文章也有很好的解决方法,可以一起看看
C++:如何输入多行数字/字符串

  • 14
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: 在Python命令行中输入多行代码并结束的方法是在最后一行输入EOF,即End of File,可以通过组合键ctrl+D来表示。当输入最后一行并回车后按下ctrl+D,input()函数会遇到EOF异常,Python的异常处理机制会捕获到此异常并执行相应的语句,例如使用break来跳出while循环,从而结束多行代码的输入。在Python2中,可以使用raw_input()函数获取整行字符串,然后使用split()函数根据分隔符拆解成子串组成的列表。对于列表中的对象,如果需要进行转换,可以采取相应的转换方法,保留字符串的继续保留即可。此外,Python允许使用反斜杠(\)来实现多行语句,即在一行代码写不下时可以使用反斜杠继续写在下一行。例如,可以将一行代码拆分为多行以增加可读性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python如何输入多行](https://blog.csdn.net/weixin_39897758/article/details/109924115)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [python如何多行输入](https://blog.csdn.net/weixin_39828193/article/details/111837929)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [2020-10-24 python命令行多行输入](https://blog.csdn.net/rozen_/article/details/109263962)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值