Language: C

#include <stdio.h>
#include <string.h>
#define NLINE 17
// 
式の行数の最大値
#define LEN 9
// 
式の１行の長さの最大値
int n;
// 
式の行数
char buff[NLINE][LEN+1];
// 
式を格納する配列
// line
行目を評価して値を返す関数
int calc(int line)
{
char c;
// 
処理内容を示す文字（数字
, *, +
）
int level;
// 
現在の行の入れ子レベル
int val;
// 
評価結果を入れる変数
int arg;
// 
演算の引数の値を入れる変数
level = strlen(buff[line]) 
-
1;
// 
自分の入れ子レベル
c = buff[line][level];
// c
はこのレベルでの処理内容
switch(c){
case '*':
// 
乗算
line++;
// 
次の行から引数の値を順に評価
val = 1;
// 
とりあえず結果を
1
とする
for(;;){
if(strlen(buff[line])
-
1 <= level) break;
// 
引数の評価は終了
if(strlen(buff[line])
-
1 == level+1){
// 
評価すべきレベルなら
arg = calc(line);
// 
引数の値を再帰的に求め
val *= arg;
// val 
にかける。
}
line++;
// 
次の行へ
if(line >= n) break;
// 
全ての行をチェックした！
}
return val;
// 
評価結果を返す
case '+':
// 
加算
line++;
// 
次の行から引数の値を順に評価
val = 0;
// 
とりあえず結果を
0
とする
for(;;){
if(strlen(buff[line])
-
1 <= level) break;
// 
引数の評価は終了
if(strlen(bu
ff[line])
-
1 == level+1){
// 
評価すべきレベルなら
arg = calc(line);
// 
引数の値を再帰的に求め
val += arg;
// val 
にたす。
}
line++;
// 
次の行へ
if(line >= n) break;
// 
全ての行をチェックした！
}
return val;
// 
評価結果を返す
default:
// 
１桁の整数
return c 
-
'0'
;
// 
対応する整数値を返す
}
}
int main(void)
{
for(;;){
int i;
scanf("%d", &n);
// 
式の行数
n
を読み込む
if(n==0) break;
// n
が
0
なら終了
for(i=0; i<n; i++)
// n
行分の式を読み込む
scanf("%s", &buff[i][0]);
printf("%d
¥
n", calc(0));
// 
式を評価した結果をプリント
}
}


Compiler output:
main.c:5:1: error: unknown type name '\U00005f0f\U0000306e\U0000884c\U00006570\U0000306e\U00006700\U00005927\U00005024'
    5 | 式の行数の最大値
      | ^~~~~~~~~~~~~~~~
main.c:8:23: error: expected ';' before 'int'
    8 | 式の１行の長さの最大値
      |                       ^
      |                       ;
    9 | int n;
      | ~~~                    
main.c:11:9: error: expected ';' before 'char'
   11 | 式の行数
      |         ^
      |         ;
   12 | char buff[NLINE][LEN+1];
      | ~~~~     
main.c:14:1: error: unknown type name '\U00005f0f\U00003092\U0000683c\U00007d0d\U00003059\U0000308b\U0000914d\U00005217'
   14 | 式を格納する配列
      | ^~~~~~~~~~~~~~~~
main.c:16:27: error: expected ';' before 'int'
   16 | 行目を評価して値を返す関数
      |                           ^
      |                           ;
   17 | int calc(int line)
      | ~~~                        
main.c: In function 'calc':
main.c:21:1: error: '\U000051e6\U00007406\U00005185\U00005bb9\U00003092\U0000793a\U00003059\U00006587\U00005b57\U0000ff08\U00006570\U00005b57' undeclared (first use in this function)
   21 | 処理内容を示す文字（数字
      | ^~~~~~~~~~~~~~~~~~~~~~~~
main.c:21:1: note: each undeclared identifier is reported only once for each function it appears in
main.c:22:4: error: expected expression before ',' token
   22 | , *, +
      |    ^
main.c:23:1: error: '\U0000ff09' undeclared (first use in this function)
   23 | ）
      | ^~
main.c:26:1: error: '\U000073fe\U00005728\U0000306e\U0000884c\U0000306e\U00005165\U0000308c\U00005b50\U000030ec\U000030d9\U000030eb' undeclared (first use in this function)
   26 | 現在の行の入れ子レベル
      | ^~~~~~~~~~~~~~~~~~~~~~
main.c:26:23: error: expected ';' before 'int'
   26 | 現在の行の入れ子レベル
      |                       ^
      |                       ;
   27 | int val;
      | ~~~                    
main.c:29:1: error: '\U00008a55\U00004fa1\U00007d50\U0000679c\U00003092\U00005165\U0000308c\U0000308b\U00005909\U00006570' undeclared (first use in this function)
   29 | 評価結果を入れる変数
      | ^~~~~~~~~~~~~~~~~~~~
main.c:29:21: error: expected ';' before 'int'
   29 | 評価結果を入れる変数
      |                     ^
      |                     ;
   30 | int arg;
      | ~~~                  
main.c:32:1: error: unknown type name '\U00006f14\U00007b97\U0000306e\U00005f15\U00006570\U0000306e\U00005024\U00003092\U00005165\U0000308c\U0000308b\U00005909\U00006570'
   32 | 演算の引数の値を入れる変数
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~
main.c:37:1: error: unknown type name '\U000081ea\U00005206\U0000306e\U00005165\U0000308c\U00005b50\U000030ec\U000030d9\U000030eb'
   37 | 自分の入れ子レベル
      | ^~~~~~~~~~~~~~~~~~
main.c:38:1: error: conflicting types for 'c'; have 'int'
   38 | c = buff[line][level];
      | ^
main.c:19:6: note: previous declaration of 'c' with type 'char'
   19 | char c;
      |      ^
main.c:40:1: error: '\U0000306f\U00003053\U0000306e\U000030ec\U000030d9\U000030eb\U00003067\U0000306e\U000051e6\U00007406\U00005185\U00005bb9' undeclared (first use in this function)
   40 | はこのレベルでの処理内容
      | ^~~~~~~~~~~~~~~~~~~~~~~~
main.c:40:25: error: expected ';' before 'switch'
   40 | はこのレベルでの処理内容
      |                         ^
      |                         ;
   41 | switch(c){
      | ~~~~~~                   
main.c:69:9: error: stray '\343' in program
   69 | <U+306B><U+304B><U+3051><U+308B><U+3002>
      |                                 ^~~~~~~~
main.c:109:7: error: stray '\343' in program
  109 | <U+306B><U+305F><U+3059><U+3002>
      |                         ^~~~~~~~
main.c: In function 'main':
main.c:138:1: error: unknown type name '\U00005f0f\U0000306e\U0000884c\U00006570'
  138 | 式の行数
      | ^~~~~~~~
main.c:140:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '\U00003092\U00008aad\U0000307f\U00008fbc\U00003080'
  140 | を読み込む
      | ^~~~~~~~~~
main.c:143:1: error: '\U0000304c' undeclared (first use in this function)
  143 | が
      | ^~
main.c:143:3: error: expected ';' before numeric constant
  143 | が
      |   ^
      |   ;
  144 | 0
      | ~  
main.c:150:8: warning: missing terminating " character
  150 | printf("%d
      |        ^
main.c:150:8: error: missing terminating " character
  150 | printf("%d
      |        ^~~
main.c:151:1: error: stray '\302' in program
  151 | <U+00A5>
      | ^~~~~~~~
main.c:152:2: warning: missing terminating " character
  152 | n", calc(0));
      |  ^
main.c:152:2: error: missing terminating " character
  152 | n", calc(0));
      |  ^~~~~~~~~~~~
main.c:152:2: error: expected ')' before '\U00005f0f\U00003092\U00008a55\U00004fa1\U00003057\U0000305f\U00007d50\U0000679c\U00003092\U000030d7\U000030ea\U000030f3\U000030c8'
  152 | n", calc(0));
      |  ^
      |  )
  153 | //
  154 | 式を評価した結果をプリント
      | ~~~~~~~~~~~~~~~~~~~~~~~~~~
main.c:150:7: note: to match this '('
  150 | printf("%d
      |       ^
main.c:152:1: error: passing argument 1 of 'printf' makes pointer from integer without a cast [-Wint-conversion]
  152 | n", calc(0));
      | ^
      | |
      | int
In file included from main.c:1:
/usr/include/stdio.h:363:43: note: expected 'const char * restrict' but argument is of type 'int'
  363 | extern int printf (const char *__restrict __format, ...);
      |                    ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
main.c:154:27: error: expected ';' before '}' token
  154 | 式を評価した結果をプリント
      |                           ^
      |                           ;
  155 | }
      | ~