ホーム » 2023 » 6月 (ページ 2)

月別アーカイブ: 6月 2023

2023年6月
 123
45678910
11121314151617
18192021222324
252627282930  

検索・リンク

fgetsではみ出たら

C言語で長い一行を読み込むのであれば、通常は”それなりに”大きい配列に読み込んでから、strdup() などでデータに応じた大きさで保存する。しかし、それ以上に長い1行を扱いたいのならどうするか…

どうしても長い一行を扱いたいのなら、realloc() などで拡張しながらデータを読み込む。

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

int main() {
  char buff[ 10 ] ;
  char*str ;
  if ( fgets( buff , sizeof( buff ) , stdin ) != NULL ) {
    // '
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  char buff[ 10 ] ;
  char*str ;
  if ( fgets( buff , sizeof( buff ) , stdin ) != NULL ) {
    // '\0'を覚える必要があるので最大sizeof(buff)-1文字まで読み込まれる
    int len = strlen( buff ) ;
    if ( (str = (char*)malloc( len + 1 )) != NULL ) {
      strcpy( str , buff ) ;
      // printf( "|%s|\n" , str ) ;
      // 通常はここまで書けばひとまず十分。

      // fgetsは行末文字'\n'まで読み込むのが基本
      // 最終文字が'\n'でなかったら、読み残しがある。
      while( buff[ len ] != '\n' ) {
        char*rp ;
        // '読み残し'を読み込む
        if ( fgets( buff , sizeof( buff ) , stdin ) == NULL )
          break ;
        len = strlen( buff ) ;
        // str を realloc() で領域を拡張する
        //   realloc()は、拡張するときは新しくメモリを確保し、
        //   格納されているデータをコピーし、元領域を解放してくれる
        if ( (rp = (char*)realloc( str , strlen( str ) + len + 1 )) == NULL )
          break ;
        else
          str = rp ;
        // reallocでは、広げられた領域に元データがコピーされているので、
        // 後ろに'読み残し'分を追加する。
        strcpy( str + strlen( str ) , buff ) ;
        // printf( "%s\n" , str ) ;
      }
      // 読み込んだ一行を表示
      printf( "|%s|\n" , str ) ;
      
      free( str ) ;
    }
  }
}
'を覚える必要があるので最大sizeof(buff)-1文字まで読み込まれる int len = strlen( buff ) ; if ( (str = (char*)malloc( len + 1 )) != NULL ) { strcpy( str , buff ) ; // printf( "|%s|\n" , str ) ; // 通常はここまで書けばひとまず十分。 // fgetsは行末文字'\n'まで読み込むのが基本 // 最終文字が'\n'でなかったら、読み残しがある。 while( buff[ len ] != '\n' ) { char*rp ; // '読み残し'を読み込む if ( fgets( buff , sizeof( buff ) , stdin ) == NULL ) break ; len = strlen( buff ) ; // str を realloc() で領域を拡張する // realloc()は、拡張するときは新しくメモリを確保し、 // 格納されているデータをコピーし、元領域を解放してくれる if ( (rp = (char*)realloc( str , strlen( str ) + len + 1 )) == NULL ) break ; else str = rp ; // reallocでは、広げられた領域に元データがコピーされているので、 // 後ろに'読み残し'分を追加する。 strcpy( str + strlen( str ) , buff ) ; // printf( "%s\n" , str ) ; } // 読み込んだ一行を表示 printf( "|%s|\n" , str ) ; free( str ) ; } } }

2022年度授業アンケート

2022年度の授業アンケートの結果。今年は、私が作ったアンケートシステムが、moodle サーバの移行トラブルと共に使えなくなってしまったので、Forms により集計が行われた。

情報ネットワーク基礎(3EI/後期/必修)

総合ポイント 83.8 でまあまあの評価。課題の評価が高くなっているが、課題を最終成績の中にはあまり組み込んでいないが、Forms により小テスト形式で実施したことが評価されたと思われる。

情報制御基礎(3年学際(EIのみの回答)/前期/選択)

総合ポイント83.0 でまあまあの評価。指導書の評価が80.4 と低い評価となっている。Web資料で講義資料を提示しているが、口頭での説明で資料との連携が弱かったのが原因かもしれない。

情報メディア工学(前期)(4EI前期/必修)

総合ポイント 85.4 で評価は高いと思われる。講義内容の評価が82.9と若干低いが、それ以外は、86.7ポイントなどで評価が高かった。

情報構造論(4EI通年/必修)

総合ポイント89.0で、他の科目とくらべ良い評価が得られている。プログラムなどを苦手とする学生からは、敬遠されがちな中、高く評価されていると思う。

データベース(5EI後期/選択)

総合ポイント 86.3 で高い評価が得られた。シラバスと課題について他よりも高い評価であった。前年までは、自分のサーバで運用していた SQL サーバの実験環境を使っていたが、今年度は Paiza.io を用いたことで、自宅でも課題に取り組みやすかったことが評価されたと思われる。

システム

最新の投稿(電子情報)

アーカイブ

カテゴリー