如何用c语言实现多组数据输入,每组数据一行每行数据个数任意

例如杭电的ACM题,我的代码如下#include<stdio.h>#include<string.h>int main(){ char ch[100]; while(scanf("%s",ch)!=EOF) { char cha; int c=0; float GPA = 0,i = 0; while(scanf("%c",&cha)!=EOF) { if(cha == '\n') break; else if(cha == 'A') { GPA += 4; i++; } else if(cha == 'B') { GPA += 3; i++; } else if(cha == 'C') { GPA += 2; i++; } else if(cha == 'D') { GPA += 1; i++; } else if(cha == 'F') { i++; } else if(cha == ' '); else c=1; } if(c == 0) printf("%.2f\n",GPA/i); else printf("Unknown letter grade in input\n"); } return 0;}

第1个回答  2019-01-31
算法竞赛题目中,由于重定向,最后将会出现EOF,而EOF标志着输入的结束。
为了利用EOF,算法竞赛选手无需考虑到底是什么东西(事实上,很多算法选手到今天甚至不知道这是什么,因为语言和库上知识的匮乏不影响算法竞赛选手做题)。所以我们一般直接当做输入失败处理,利用scanf返回输入成功参数的性质
典型的方法是:
例如每组数据第一个要输入的参数是p,则程序框架会这么写:
while(scanf("%d", &p) == 1)
{
//这里是其他参数的输入和算法过程
}
当第一行是三个数你可能会这么做:
当然了,刚刚那种办法是可以的,但为了使程序更漂亮:
while(scanf("%d%d%d", &a, &b, &c) == 3)
如果会使用EOF:
scanf(...) != EOF
但是注意!虽然大多数编译器的eof是-1,但是保险起见不要写-1,因为EOF是impl-def的。
输入流对象由于重载了bool,更容易:
while(std::cin>>a>>b)即可。追问

利用EOF输入多组数据我会使用,但是如何理解 while(~scanf("%s",ch)!=NULL)
{
。。。
while(scanf("%c",&ch)!=EOF)
。。。
}这种方法

本回答被网友采纳
第2个回答  2019-01-31
程序要求是首先输入一个数字确认行数,然后在每一行输入一组整数(长度是由输入者输入的数字个数决定),我想用二维数组键入,这一部分的代码如下追问

这道题没有说明输入多少行数据,也没有说明每行输入多少个数据