Exemple #1
0
/**
 * 入力を読み込む関数
 * @return char * 読み込んだ文字列
 */
char *read_input(void)
{
    int c;
    char *input;    // 入力された文字列
    int len = 0;    // バッファの現在の文字数
    int len_max = BUFFER_SIZE_UNIT; // バッファの文字数の初期単位
    
    // ある程度の大きさで確保
    input = (char *)calloc(len_max, sizeof(char));
    
    // 終わりまで1文字ずつ取得
    while (1)
    {
        c = getc(stdin);    // 文字の取得
        // 改行文字か判別
        if (c == '\n' || c == '\r' || c == EOF)
        {
            // NULL文字を追加しておく
            set_character(&input, '\0', &len, &len_max);
            break;  // 繰り返しを抜ける
        }
        // 空白文字でない場合
        else
        {
            // 文字の保存
            set_character(&input, tolower(c), &len, &len_max);
        }
    }
    
    return input;   // 取得文字列を返す
}
Exemple #2
0
int		init_SDL(t_graph *graph)
{
  graph->pos = (HEIGHT / 2) - (HEIGHT / 4);
  graph->poscurs = 0;
  set_null(graph);
  SDL_WM_SetCaption(NAME, NULL);
  graph->charac_num = 0;
  if (TTF_Init() == -1)
    return (-1);
  init_font(graph);
  if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
    return (-1);
  graph->screen = SDL_SetVideoMode(WIDTH, HEIGHT, BPP,
				   SDL_SWSURFACE | SDL_FULLSCREEN);
  if (graph->screen == NULL)
    return (-1);
  graph->quit = 0;
  set_character(graph);
  init_spaceship(graph);
  graph->background = load_image("img/space.bmp");
  graph->spacefactor = 1;
  init_joystick(graph);
  intro_music(graph);
  return (0);
}
Exemple #3
0
/**
 * ファイルを読み込んでドキュメントと転置索引を作る関数
 * @param char *file_name 開くファイル名
 */
void read_file(char *file_name)
{
    FILE *fp;
    int c;
    int pre_word_id = -1, cur_word_id;   // 単語のID
    char *word; // 現在の単語
    char *line; // 現在の行
    int word_len = 0;   // 単語の現在の文字数
    int line_len = 0;   // 行の現在の文字数
    int word_len_max = WORD_LENGTH_UNIT;    // 単語の文字数の初期単位
    int line_len_max = LINE_LENGTH_UNIT;    // 行の文字数の初期単位
    STATE state = S_SPACE;    // 状態
    
    if ((fp = fopen(file_name, "r")) == NULL)
    {
        fprintf(stderr, "File Open Error: %s\n", file_name);
        exit(1);
    }
    
    // ある程度の大きさで確保
    word = (char *)malloc(sizeof(char) * word_len_max);
    line = (char *)malloc(sizeof(char) * line_len_max);
    
    if (word == NULL || line == NULL)
    {
        printf("Memory Allocation Error\n");
        exit(1);
    }
    
    // 終わりまで1文字ずつ取得
    while (1)
    {
        c = getc(fp);   // 文字の取得
        
        // 空白文字か判別
        if (isspace(c) || c == EOF)
        {
            if (state == S_WORD)    // 文字が入力されていたなら
            {
                // 単語にNULL文字を追加
                set_character(&word, '\0', &word_len, &word_len_max);
                cur_word_id = add_array(word, n_docs);    // 配列に追加
                if (pre_word_id != -1)  // 前回の単語がある場合
                    associate_words(pre_word_id, cur_word_id, n_docs); // 関連付け

                word_len = 0;               // 単語の文字数の初期化
                pre_word_id = cur_word_id;  // 前回の単語のIDを保存
            }
            
            if (c == '\n' || c == '\r' || c == EOF)  // 改行かファイルの終わりなら
            {
                // 行にNULL文字を追加
                set_character(&line, '\0', &line_len, &line_len_max);
                
                // 行をドキュメントとして保存
                if (strlen(line) > 0)
                    insert_document(line);  // 配列に追加
                
                line_len = 0;       // 行の文字数の初期化
                pre_word_id = -1;   // 前回の単語はない
            }
            else
            {
                // 行の場合は空白も入れる
                set_character(&line, c, &line_len, &line_len_max);
            }
            
            if (c == EOF)   // 繰り返しを抜ける
                break;
            
            state = S_SPACE;    // 状態の変更
        }
        // 空白文字でない場合(単語の場合)
        else
        {
            // 文字の保存
            set_character(&word, tolower(c), &word_len, &word_len_max); // 小文字で保存
            set_character(&line, c, &line_len, &line_len_max);
            state = S_WORD; // 状態の変更
        }
    }
    
    // 解放
    fclose(fp);
    free(word);
    free(line);
}