从文件输入永远持续

时间:2012-06-21 14:27:54

标签: c input

我有下一个C代码:

#include <stdio.h>
#include <stdlib.h>
#include "list.h"
#include "graph.h"

int main() {
    int action, src, dst;
    IntGraph g;

    g = newIntGraph();

    while (1) {
        printf("1 -> Add a nodes.\n");
        printf("2 -> Add an arc.\n");
        printf("3 -> Dump the graph.\n");
        printf("4 -> BFS.\n");
        printf("What do you want to do? [1, 2, 3, 4] ");
        scanf("%d", &action);

        switch (action) {
            case 1:
                addIntGraphNode(&g);
                break;

            case 2:
                printf("Insert source and destination: ");
                scanf("%d", &src);
                scanf("%d", &dst);
                addIntGraphArc(&g, src, dst);
                break;

            case 3:
                dumpIntGraph(g, "GRAPH\0");
                break;

            case 4:
                printf("Insert the node to start: ");
                scanf("%d", &src);
                BFSIntGraph(g, src);
                break;

            default:
                return 0;
        }
    }
}

但我需要它做一些测试,所以我希望有一个准备好的输入来生成基本图形。

我在一个文件中写入了输入(每行一个数字)。我有一个十行和十一个文件的文件,因为我希望程序生成一个包含十个节点的图形。

当我输入:

./graph-test.run < input/graph-input.txt

它从文件开始并无休止地读取,添加了数百个节点。我想在文件完成后停止让我做其他操作。

我怎样才能做到这一点?如果我手动插入值,代码就可以正常工作,因此这是一个与输入相关的问题。

2 个答案:

答案 0 :(得分:1)

问题是没有检查scanf() EOF的返回值。如果遇到EOFaction将不予修改。建议:

if (1 != scanf("%d", &action)) /* scanf() returns number of assignments made,
                                  which should be 1 in this case. */
{
    break; /* exit while loop. */
}

答案 1 :(得分:1)

每次拨打scanf时,请检查是否返回EOF。如果EOF突然出现while(1)循环。

if (EOF == scanf(....))
    break; //or exit(0);