从C中的文件读取测试用例时出错

时间:2011-07-11 03:55:54

标签: c file for-loop testcase prims-algorithm

对于编程作业,我正在实现Prim的算法,测试用例的输入文件格式如下:

输入的第一行是整数C,表示测试用例的数量。每个测试用例的第一行包含两个整数N和E,其中N表示图中的节点数,E表示边数。然后是E行,每行有3个整数I,J和P,其中I和J代表边的节点(无向图,其中0≤I,J

虽然即使我正在启动代码(我是编程新手)但我不明白为什么我的代码只读取测试用例的条目,我做错了什么?

这是读取文件entradaA.in的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv []){

int testCases;
int numberNodes;
int numberEdges;

freopen("entradaA.in", "r", stdin);
int i, j, cont=1;
int total = 0;
int a, b, c;

scanf ("%d", &testCases);



    for (i=0; i<testCases; ++i)
    {

    scanf ("%d %d", &numberNodes, &numberEdges); //Number Nodes & Edges

        for (i=0; i<numberEdges; i++)
        {
        scanf ("%d %d %d", &a,&b,&c);//
        printf ("%d %d %d\n", a, b, c);
        }

    printf ("Caso %d: Total Weight %d\n", cont++, total);
    }

return (0);

}

输入文件(entradaA.in)看起来像这样

2
7 11
0 1 17
0 2 10
0 6 14
1 2 6
1 3 1
2 3 4
2 6 3
3 4 7
4 6 10
4 5 2
5 6 9
6 9
0 1 30
0 2 30
1 3 22
1 5 33
2 3 20
2 4 33
3 4 15
3 5 20
5 4 20

2 个答案:

答案 0 :(得分:1)

你在循环中修改了循环变量i,这通常是不需要的。在这种情况下,由于i循环到11(边数),它导致程序终止,因为11不小于2(输入中的测试用例数)。

你可以使用临时变量(如果你使用C ++,谢谢aardvarkk):

for (int i=0; i<testCases; ++i)
    {
        scanf ("%d %d", &numberNodes, &numberEdges); //Number Nodes & Edges
        for (int j=0; j<numberEdges; j++)

请注意,int j也可能是int i,但我不推荐它。只使用另一个名称的变量会更清楚。或者如果您在C中,只需删除两个int并使用函数本地的变量。

有关详情,请阅读this

答案 1 :(得分:0)

您的代码在我的机器上产生了以下输出。我所做的唯一更改是在int调用之前声明ijfreopen等,以使代码成为标准C.

0 1 17
0 2 10
0 6 14
1 2 6
1 3 1
2 3 4
2 6 3
3 4 7
4 6 10
4 5 2
5 6 9
Caso 1: Total Weight 0

这肯定比你的测试用例更多,所以我不确定问题是什么?