2016-05-18 23 views
3

私は迷路ゲームを解決するためにC言語でプログラムを書いています。入力された迷路ファイルはstdinから読み込まれます。私はstdinから迷路を読んでnoを印刷するプログラムの下に書いた。行と列のしかし、入力ファイルを完全に読んだら、次のステップを実行できるように、再度アクセスすることはできますか?Cプログラムでstdinを複数回読み込む方法

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

#define BUFFERSIZE (1000) 


struct maze { 
    char ** map; 
    int startx, starty; 
    int numrows; 
    int initdir; 
}; 

void ReadMaze(char * filename, struct maze * maze); 

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


    ReadMaze(argv[1], &maze); 

    return EXIT_SUCCESS; 
} 


/* Creates a maze from a file */ 

void ReadMaze(char * filename, struct maze * maze) { 
    char buffer[BUFFERSIZE]; 
    char mazeValue [BUFFERSIZE][BUFFERSIZE]; 
    char ** map; 
    int rows = 0, foundentrance = 0, foundexit = 0; 
    int columns = 0; 

    /* Determine number of rows in maze */ 


    while (fgets(buffer, BUFFERSIZE, stdin)){ 
     ++rows; 
     puts(buffer); 
     columns = strlen(buffer); 

    } 

    printf("No of rows: %d\n", rows); 
    printf("No of columns: %d\n", columns); 

    if (!(map = malloc(rows * sizeof *map))) { 
     fputs("Couldn't allocate memory for map\n", stderr); 
     exit(EXIT_FAILURE); 
    } 

} 
+0

迷路のサイズと迷路データの2つの値(幅と高さ)で開始するようにファイルの形式を変更できますか?そうすれば、ファイルには1回のパスしか必要ありません。 –

答えて

5

読み込み時にバッファに格納する必要があります。 stdinを読んだら、巻き戻したり読んだりすることはできません。

+0

あなたは私にバッファにデータを保存する方法を理解してもらえますか? – user6344678

+0

私の迷路ファイルは
#のようなものです。#######
#.......#
####。####
#....#..#
#。####。##
間に空白がありません – user6344678

+0

私はちょうどchar *バッファに直接ダンプします。申し訳ありませんが、私のCは少し錆びています –

0

ファイルをもう一度読み取る場合は、rewindを使用できます。

FILE * fp; 

// Open and read the file 

rewind(fp); 

// Read it again 

fclose(fp); 

しかし、stdinでは、これは機能しません。 stdinから読み取った内容を保存する必要があります。

関連する問題