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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用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;

参考技术A 算法竞赛题目中,由于重定向,最后将会出现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)
。。。
这种方法

参考技术B 程序要求是首先输入一个数字确认行数,然后在每一行输入一组整数(长度是由输入者输入的数字个数决定),我想用二维数组键入,这一部分的代码如下追问

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

以上是关于如何用c语言实现多组数据输入,每组数据一行每行数据个数任意的主要内容,如果未能解决你的问题,请参考以下文章

ZZNUOJ_用C语言编写程序实现1153:大整数加法(附完整源码)

C语言,输入多组数据,每行两个,然后对应每行一个输出结果

ZZNUOJ_用C语言编写程序实现1379:绝对值排序(附完整源码)

ZZNUOJ_C语言1083:数值统计(多实例测试)(完整代码)

数值统计

水仙花数c语言