c语言 输入多行数据

好吧我要问的就是OJ上用烂了的那道最简单A+B,只不过这个要求多组数据的输入:
题目描述:计算A+B 输入:
输入n(n未知,也不可能从键盘上输入)组测试数据每组1行2整数A, B输出:输出A+B值样例输入1 23 4样例输出37
这是网上很流行的那个答案:
#include <stdio.h>
void main(){ int a,b; while (scanf("%d%d",&a,&b)!=EOF) { printf("%d\n",a+b); }}
现在问题来了。。。貌似这个答案是对的??build之后提示的是没有错误,但是我运行后仍然只能计算出第一行输入的数据。run的对话框跳出来之后,按照题目给定的测试数据,我的输入是这样的:先按1,然后空格,然后按2,然后回车就直接出现结果为3了。。。。根本不是我想的那样回车后就换行继续输入另一组计算数据啊。。。图片为证。表示EOF完全不会用啊!!!!!

#include <iostream>

#include <list>

using namespace std;

int main()

{

baiint a,b;

list<int> l;

while (scanf("%d%d",&a,&b)!=EOF)

{

dul.push_back(a+b);

}

while (!l.empty())

{

cout<<l.front()<<endl;

l.pop_front();

}

}

需要用到list保存结果,因为n未知大小所以用list更合适。

如果是想以比较方便的方式输入数据,可以考虑把多行的数据存在文本文件中,每次使用这些数据的时候,可以直接从这个文件里面读取。

如果编译后生成的可执行文件名为a.exe,存放数据的文件为b.txt(和a.exe放在同一文件夹下),则再控制台(命令行提示符状态)输入: a < b.txt 即可。 其中的小于号<,就是输入重定向符号。

扩展资料:

C语言包含的各种控制语句仅有9种,关键字也只有32 个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。

参考资料来源:百度百科-c语言

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-27
我以前也有这样的疑问 后来我终于知道原来是这样 这样的输入都是要求最后输入一个Ctrl z结束 直接把eof改成2然后输完数据后 回车是不能结束的 因为计算机还不知道你还是不是继续输入 按Ctrl +z结束就能出结果了追问

把EOF改成2是什么意思?能具体说下嘛。另外,什么时候按ctrl+z??抱歉我比较菜
( ⊙o⊙ )能不能再说下

追答

这道题要保存数据的 我来写一个
#include
int main()
{
int a[100],b[100];
int i=0,j=0,m;
char c;
while(scanf("%d %d%c",&a[i++],&b[j++],&c)==3);
for(m=0;m<j-1;m++)
printf("%d\n",a[m]+b[m]);
return 0;

}

scanf的返回值为成功读取的数据个数

追问

哦。。。是这样啊。。谢谢啦。
可是oj上提供的测试方法上没写ctrl+z,这样提交打出的是wrong。。。

追答

这个必须要Ctrl +z结束呀 你想想你打回车之后肯定不会结束嘛 需要另外一种方式结束 那就肯定是这个了 原题是什么样子的 可能是格式不对 读取或者输出的格式不对 你把原题发给我看看

本回答被提问者采纳
第2个回答  2014-05-07
如果你想把n组数据全部输入后,再显示n个和,只定义a,b两个变量是不行的,采用二维数组 int a[N][2]。
第3个回答  推荐于2017-12-15
#include <iostream>
#include <list>
using namespace std;

int main()
{
int a,b;
list<int> l;
while (scanf("%d%d",&a,&b)!=EOF)
{
l.push_back(a+b);
}
while (!l.empty())
{
cout<<l.front()<<endl;
l.pop_front();
}
}
需要用到list保存结果,因为n未知大小所以用list更合适本回答被网友采纳
第4个回答  2014-05-07
错了,int a,b;这个定义的是2个整数,不是数组,
相似回答