85990


C言語です。名前、点数が約300名分記載されたファイルを読み込み、偏差値を加えて表示するといったプログラムです。  
以下のコードによりファイルを読み込むと、その下にあるエラー？が表示されます。

解決方法を教えてください。質問内容が不十分でしたらその旨も教えてください。

これまでに試したこととして、「syntax error near unexpected token
`('」がカッコの種類が違うみたいな記事を見つけたのですが、どこが違うのかがわかりませんでした。

[code]

    #include <stdio.h>   /*ヘッダファイル。標準入出力ライブラリ*/
    #include <string.h>  /*文字列処理に関するライブラリ*/
    #include <math.h>  /*数学関数に関するライブラリ*/
    #define DATA_MAX 400 /* 扱える最大人数 */
    #define STRING_LENGTH 41 /* 文字列の最大字数 (日本語なら 2 倍) + 1*/
    
    typedef struct personal_data { /* 構造体の定義 */
      char name[STRING_LENGTH];    /* 氏名 (日本語STRING_LENGTH-1文字) */
      double score;                /* 点数 */
    } personal_data;               /*構造体の名称定義*/
    void print_data(personal_data x[], int num, double sum); /*関数宣言*/
    
    int main() {                    /*main関数*/
      personal_data data[DATA_MAX]; /*文字列を構造体を入れる*/
      int num = 0 /* 読み込んだ人数 */, read_result /* データの読み込み結果 */;
      char tmpChar[STRING_LENGTH] /* 氏名の一時的な読み込み先 */,
          read_format[20] = "%100s" /* 文字列の読み込みフォーマット */;
      double sum = 0; /*点数合計を保存用の変数*/
    
      sprintf(read_format, "%%%ds",
              STRING_LENGTH - 1); /* 読み込む文字列の書式生成 */
      printf("名前と点数を入力(終了は[Ctrl]+[Z]/[D]\n"); /*入力促進*/
      while (1) { /*読み込みの繰り返し処理*/
        read_result = scanf(
            read_format, tmpChar); /*1回目の読み込み結果を読み込みフォーマットに*/
        if (read_result == EOF) {     /*ファイルの中身なし*/
          break;                      /*ループ脱却*/
        } else if (num >= DATA_MAX) { /*データ数が最大値かどうか確認*/
          printf("扱える文字数は%dまで\n",
                 DATA_MAX); /*最大値を超える場合その旨を出力*/
          return 1;         /*異常終了*/
        }
        strcpy(data[num].name, tmpChar); /* 一時的な読み込み先からデータコピー*/
        read_result = scanf("%lg", &data[num].score); /*読み込み*/
        if (read_result == EOF) { /*ファイル終着点の処理*/
          break;                  /*ループ脱却*/
        }                         /* 名前、点数読み込み成功 */
        sum += data[num].score; /*点数合計計算*/
        num++;                  /* 読み込んだ人数カウント・アップ */
        
      }
      print_data(data, num, sum); /*関数に数値を渡す*/
      return 0;                   /*正常終了*/
    }
    
    void print_data(personal_data x[], int num, double sum) {
                     /* 関数に配列データを渡す */
      int i,j;                      /*配列データを特定するための変数*/
      double ave = 0,h = 0, sigma = 0;                /*平均 標準偏差*/
      ave = sum / num;   /*平均の計算*/
      for( j = 0, sigma = 0.0; j < num; ++j ){   /*分散の計算*/
     sigma += pow( x[j].score - ave, 2.0 );  /*分散の式*/
     }
     
    /*sigma = sqrt( sigma / ( j - 1 ) );   標準偏差の計算結果*/
     for (i = 0; i < num; i++) { /*人数分を一行ずつ表示*/
       /*偏差値計算*/
      h = x[i].score - ave;
        printf("%s\t%g\t%g\n", x[i].name, x[i].score,h/sigma * 10 + 50); /*名前、点数、偏差値*/
     }
      return; /*戻り値なし*/
    }
    
[/code]

[code]

    ./ファイル名: line 7: typedef: command not found
    ./ファイル名: line 8: syntax error near unexpected token `('
    ./ファイル名: line 8: `  char name[STRING_LENGTH];    /* 氏名 (日本語STRING_LENGTH-1文字) */'
    
[/code]


CC BY-SA 4.0
2022-01-28T15:52:30.533
85989
2022-01-28T16:26:35.950
2022-01-28T16:24:29.663
3060
32999
question
c
エラーの原因がわかりません


そのCコードのファイル名は `./ファイル名` で、あなたはおそらくシェル上で

[code]

    sh ./ファイル名
    
[/code]

のようにするかどうかして、そのコードを **シェルスクリプト** として実行したのでしょう。

Cプログラムはコンパイルして **実行可能ファイル** を生成させることが必要です。  
そのコードを、たとえば `test.c` というファイルにして、

[code]

    cc test.c -o test
    
[/code]

または

[code]

    make test
    
[/code]

を実行して `./test` という実行可能ファイルを生成させ、シェルで

[code]

    ./test
    
[/code]

を実行します。


CC BY-SA 4.0
2022-01-28T16:26:35.950
85990
2022-01-28T16:26:35.950
45045
85989
answer